1 do CLX =gt; QTINT dando erro...
Boa tarde a todos.
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... :(
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
Curtidas 0
Respostas
Dopi
04/01/2005
Nao sei se entendi direito... O programa portal é um EXE que chama os demais EXE, é isso ?
Qual é o comando que vc está usando para executar os EXE externos ?
No Linux funciona bem ?
Qual é o comando que vc está usando para executar os EXE externos ?
No Linux funciona bem ?
GOSTEI 0
Rodsrabbit
04/01/2005
Sim, Daniel.. É um EXE chamando outro. Eu estou usando o ShellExecute.... Ta rodando no Win98.
GOSTEI 0
Adilsond
04/01/2005
Caso voce esteja passando o handle da aplicação chamadora na funçãoi shellExecute, mude para 0.
De: ShellExecute(Handle,...
Para: ShellExecute(0,...
De: ShellExecute(Handle,...
Para: ShellExecute(0,...
GOSTEI 0
Dopi
04/01/2005
A funçao abaixo foi extraida da Unit ACBrUtil.pas, ela consegue rodar um Executável externo no Windows ou Linux
No Win32 usei Winexec e ou CreatProcess.... sempre funcionou bem...
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...
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