Delphi - mostrar forma que esta en DLL

 
Vista:

mostrar forma que esta en DLL

Publicado por gvs (2 intervenciones) el 28/08/2007 22:39:56
estoy creando una DLL en Delphi 2007 y quiero mostrar una forma que esta en la DLL cuando la DLL se inicie (DLL_PROCESS_ATTACH) y destruir la forma cuando la DLL termine (DLL_PROCESS_DETACH).

El codigo que escribi no muestra la forma, y encima cuando la DLL termina me sale una exception.
como lo soluciono?

library SocketHook;

uses
Windows, Forms,
Main in 'Main.pas' {frmMain};

var
Forma: TfrmMain;

procedure DllMain(reason: DWORD);
begin
case reason of
DLL_PROCESS_ATTACH:
begin
Forma := TfrmMain.Create(nil);
Forma.Show;
end;

DLL_PROCESS_DETACH:
begin
Forma.Free;
end;
end;
end;

begin
DisableThreadLibraryCalls(hInstance);

DllProc := @DllMain;
DllProc(DLL_PROCESS_ATTACH);
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:mostrar forma que esta en DLL

Publicado por E.T. (1244 intervenciones) el 29/08/2007 01:47:49
Pues parece ser, pero no estoy seguro, que sea el nil que le das a la forma al crearla, normalmente seria self en lugar de nil, checa eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mostrar forma que esta en DLL

Publicado por gvs (2 intervenciones) el 31/08/2007 14:25:00
puse self pero el compilador no lo reconocer
debe ser porque self no esta definido, no es valido en este caso.

alguien sabe como mostrar una forma que se encuentra en una dll correctamente ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:mostrar forma que esta en DLL

Publicado por jose luis (157 intervenciones) el 01/09/2007 00:25:51
Este es un ejemplo de como mostra una form como modal o sin el modal
Codigo de la dll
library Project1dll;

uses
SysUtils,
Classes,
DllForm in 'DllForm.pas' {frmDllForm};

procedure ShowDllForm;stdcall;
begin
frmDllForm :=TfrmDllForm.Create(nil);
frmDllForm.Show;
end;

function ShowDllFormModal:integer;stdcall;
begin
frmDllForm :=TfrmDllForm.Create(nil);
Result := frmDllForm.ShowModal;
end;

Exports
ShowDllForm,
ShowDllFormModal ;

begin
end.

Unit de la dll

unit DllForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TfrmDllForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmDllForm: TfrmDllForm;

implementation

{$R *.DFM}

procedure TfrmDllForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

end.

Unit del proyecto que llama o ejecuta la dll
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure ShowForm;stdcall;external 'Project1dll.dll' name 'ShowDllForm';
function ShowFormModal:integer;stdcall;external 'Project1dll.dll' name 'ShowDllFormModal';
var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowFormModal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowForm;
end;

end.

El programa es simple pero te puede ayudar en lo que necesitas, cualquier cosa no dudes en preguntar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar