Fórum 1 do CLX =gt; QTINT dando erro... #264039
04/01/2005
0
Tenho várias aplicações CLX que usam um mesmo modelo padrão. Todas têm tela de login para acessar os sistemas.
Criei então um portal, uma aplicação também CLX para chamar os outros programas e criei um arquivo temporário como um flag para as aplicações chamadas não exibirem a tela de login e abrirem a tela principal. Pra isso eu simulei os eventos que contêm códigos exigidos para o andamento do programa. Ex.: Form1.FormShow(Sender), Button1.Click.
Funciona, o programa executa criando a tela de login mas não a exibe e faz o login do usuário. No entanto ao navegar na aplicação a maior parte das telas quando clico apresentam um Access Violation na QTINT e isso varia de acordo com a aplicação, lembrando que as aplicações não são idênticas mas foram construídas no mesmo modelo.
Já quando eu executo a aplicação fora do portal elas funcionam normalmente.
Alguém pode me dar uma luz a respeito desse problema? Não sei se são coisas de CLX mas sei que já estou ficando desanimado... :(
Rodsrabbit
Curtir tópico
+ 0Posts
04/01/2005
Dopi
Qual é o comando que vc está usando para executar os EXE externos ?
No Linux funciona bem ?
Gostei + 0
05/01/2005
Rodsrabbit
Gostei + 0
05/01/2005
Adilsond
De: ShellExecute(Handle,...
Para: ShellExecute(0,...
Gostei + 0
05/01/2005
Dopi
No Win32 usei Winexec e ou CreatProcess.... sempre funcionou bem...
interface
procedure RunCommand(Command: String; Params: String = ´´; Wait : Boolean = false;
WindowState : Word = 0);
implementation
uses StrUtils, Classes,
{$ifdef MSWINDOWS} Windows {$else} Libc {$endif} ;
{-----------------------------------------------------------------------------
- Executa programa Externo descrito em "Command", adcionando os Parametros
"Params" na linha de comando
- Se "Wait" for true para a execução da aplicação para esperar a conclusao do
programa externo executado por "Command"
- WindowState apenas é utilizado na plataforma Windows
---------------------------------------------------------------------------- }
procedure RunCommand(Command: String; Params: String; Wait : Boolean;
WindowState : Word);
var
{$ifdef MSWINDOWS}
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
Executed : Boolean ;
Path : PChar ;
{$endif}
ConnectCommand : PChar;
begin
{$ifdef LINUX}
Command := Trim(Command + ´ ´ + Params) ;
if not Wait then
Command := Command + ´ &´ ; { & = Rodar em BackGround}
ConnectCommand := PChar(Command);
Libc.system(ConnectCommand);
{$endif}
{$ifdef MSWINDOWS}
ConnectCommand := PChar(Command + ´ ´ + Params);
if not Wait then
winexec(ConnectCommand, WindowState)
else
begin
Path := PChar(ExtractFilePath(Command)) ;
if Length(Path) = 0 then
Path := nil ;
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Executed := CreateProcess(nil, ConnectCommand, nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
Path, SUInfo, ProcInfo);
try
{ Aguarda até ser finalizado }
if Executed then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
finally
{ Libera os Handles }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
{$endif}
end;
O Win98 costuma dar problemas quando há consumo excessivo de recursos... Execute o programa de Monitor de Recursos do Win98 e verifique se os recursos estão sendo liberados quando o programa é fechado...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)