1 do CLX =gt; QTINT dando erro...

Delphi

04/01/2005

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... :(


Rodsrabbit

Rodsrabbit

Curtidas 0

Respostas

Dopi

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 ?


GOSTEI 0
Rodsrabbit

Rodsrabbit

04/01/2005

Sim, Daniel.. É um EXE chamando outro. Eu estou usando o ShellExecute.... Ta rodando no Win98.


GOSTEI 0
Adilsond

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,...


GOSTEI 0
Dopi

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...

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
POSTAR