Hola a todos,
De vuelta con el mismo tema...
Como comente en el ultimo mensaje, finalmente opte por crear una DLL en la que tenia una sola procedure que se encarga de ejecutar la aplicacion...
Desde un EXE diferente, declaro la DLL i en el evento del boton "Acceder", ejecuto la procedure de la DLL que me arranca la aplicacion (le paso como parametros, el usuario, etc...)...
Todo funciona perfecto hasta que, desde el formulario principal cierro la aplicacion... Entonces la procedure de la DLL finaliza, se devuelve el flujo al EXE i este, al cerrarse lanza un error de "Acces violation"...
Lo curioso es que el error solo lo da cuando lo ejecuto desde RAD Studio, si lo ejecuto desde Windows XP no da el error, en cambio si lo ejecuto desde Windows 2008 Server tambien da el error...
Por si podeis ayudarme aqui esta el codigo de la DLL y del EXE:
-
Código Delphi
[-]
library logistica_app;
uses
SysUtils,
Classes,
Forms,
uUserData in '..\Cliente\uUserData.pas',
procedure execAPP(user: String);
var
oldHandle: THandle;
begin
global_usuario:=user;
Application.Initialize;
Application.Title := 'Gestion Logistica '+' ['+global_usuario+']';
Application.CreateForm(TstylersDM, stylersDM);
Application.CreateForm(TserverfuncDM, serverfuncDM);
Application.CreateForm(TmensajesDM, mensajesDM);
Application.CreateForm(TimagenesDM, imagenesDM);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end;
exports
execAPP;
{$R *.res}
begin
end.
El codigo del EXE es este (resumiendo):
Código Delphi
[-]
unit fINICIO;
interface
uses
Windows, Messages, ....
type
TfrmInicio = class(TForm)
private
...
public
end;
var
procedure execAPP(user: String); stdcall external 'logistica_app.dll';
implementation
procedure TfrmInicio.IniciarAplicacion(user: String);
begin
Hide;
execAPP(user, appHandle);
Close;
end;
Parece como si el "objeto" Application del EXE ya no exista al volver de la DLL... Pero parece que deberian ser diferentes...
No se, si alguien puede ayudarme se lo agradecere...
Un saludo
Josep Mª