Form em DLL

Delphi

13/09/2006

Galera comecei a colocar meus forms dentro de DLLs p/ deixar a aplicação mais leve e por ventura facilitar as atualizações,

só que não sei o tipo correto de criar esses forms peguei algumas dicas mais não me serviram 100¬ tipo essa:

dentro da DLL:
procedure Form(Handle: THandle); stdcall; begin with tfform.CreateParented(Handle) do try BorderStyle := bsDialog; Position := poScreenCenter; ShowModal; finally Free; end; end; exports Form;


no sistema:
implementation {$R *.dfm} procedure Form(Handle: THandle); stdcall; external ´nomeDa.dll´; procedure TForm1.Button1Click(Sender: TObject); begin Form(Application.Handle); end;


Grato se alguém me der uma força
thanks


Marcos Fernando

Marcos Fernando

Curtidas 0

Respostas

Fabiano Góes

Fabiano Góes

13/09/2006

vou tentar te explicar,

seguinte, imagine um Modulo de Clientes onde o arquivo de projeto seria assim:
program ModuloClientes;

uses
  Forms,
  unFrmClientes in ´unFrmClientes.pas´ ;

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmClientes, frmClientes);
  Application.Run;
end.



para colocar este módulo em uma dll, altere-o assim:
library ModuloClientes;

uses
  SysUtils,
  Classes,
  Forms,
  unFrmClientes in ´unFrmClientes.pas´ ;

{$R *.res}

procedure Iniciar; stdcall;
begin
  with TfrmClientes.Create(Application) do
  try
    ShowModal;
  finally
    Release;
    Free;
  end;
end;

exports
  Iniciar;

begin
end.

ao compilar este projeto(library) será gerado a seguinte dll: ModuloClientes.dll

então crie um método para chamar esta dll:
procedure AbreModuloDLL(FileName: TFileName);
var
  DLL: THandle;
  Iniciar: procedure; stdcall;
begin
  DLL := LoadLibrary(PChar(FileName));
  if (DLL = 0) then
    RaiseLastOSError;

  try
    @Iniciar := GetProcAddress(DLL, ´Iniciar´);
    if (@Iniciar = nil) then
      RaiseLastOSError;

    Iniciar;
  finally
    FreeLibrary(DLL);
  end;
end;



para fazer a chamada faça assim:
  AbreModuloDLL(´ModuloClientes.dll´);


agpra e só fazer um teste.

Bom espero ter ajudado, quaquer duvida é só postar ok.

abraço !!!


GOSTEI 0
Marcos Fernando

Marcos Fernando

13/09/2006

Guri valeu pela força deu certo, só que assim: toda ves que eu chamo um form ele abre no iniciar também isso não é muito legal né,,,

Sabe me informar como corrigir isso?

Thanks


GOSTEI 0
Marcos Fernando

Marcos Fernando

13/09/2006

Guri implementei sua SP para que eu possa chamar o form que eu quizer ficou assim:

procedure AbreModuloDLL(FileName: TFileName; F_n: String); var DLL: THandle; Form: procedure; stdcall; F_n2 : string; begin F_n2 := F_n; DLL := LoadLibrary(PChar(FileName)); if (DLL = 0) then RaiseLastOSError; try @Form := GetProcAddress(DLL, pchar(F_n2)); if (@Form = nil) then RaiseLastOSError; Form; finally FreeLibrary(DLL); end; end;


ai na chamada é só indicar o nome assim:
AbreModuloDLL(´ModuloClientes.dll´,´pesqClientes´);


só falta aquele BO do iniciar agora,

thanks


GOSTEI 0
Rodc

Rodc

13/09/2006

Tem como meu aplicativo acessar as funções e variáveis que estão no form que está dentro da DLL? E o contrário, também é possível? Acessar as variáveis do sistema de dentro da DLL?


GOSTEI 0
Prmas

Prmas

13/09/2006

Olá pessoal,

Otima explicaçãodo Fabiano Góes.

No meu caso porém, o form está ligado a funções em outros forms que estão no aplicativo ou pretendo colocar em outra dll.

Como posso chamar essas funções do aplicativo ou outra dll?

Isso é possível? Se alguém tiver a respostam por favor me ajude...

Obrigado a todos.

Marcos


GOSTEI 0
Mmoreira

Mmoreira

13/09/2006

Pessoal,

Alguem sabe como resolver o problema do:

prmas

Estou com a mesma duvida!!


GOSTEI 0
Eniorm

Eniorm

13/09/2006

procedure AbreModuloDLL(FileName: TFileName); var DLL: THandle; Iniciar: procedure; stdcall;


o que vem a ser esse [b:0ce297125b]stdcall[/b:0ce297125b] e qual a finalidade do mesmo???

fiz um teste aqui e resultou que, ao fechar o form (que está na dll) é fechado o programa todo, é correto isso ???

abraço


GOSTEI 0
Vicente Santos

Vicente Santos

13/09/2006

CARA isso tirou todas as minhas duvidas, valeu mesmo ! showww;
GOSTEI 0
Khushi

Khushi

13/09/2006

You can get the solution by visit on this link https://unfitpc.com here is the best solution of your problem.
GOSTEI 0
POSTAR