Você está na página 1de 5

Abrir Form DLL usando LoadLibrary - Frum DevMedia

19/09/16 11:16 AM

Buscar

PERGUNTAS RECENTES

TODAS AS PERGUNTAS

TAGS

MEUS TPICOS

PESQUISAR

Abrir Form DLL usando LoadLibrary


DELPHI

EnioRM - 06 mar 2006

Ol pessoal, estou com um problema


como fao pra abrir um form que est numa dll? mas usando o LoadLibrary???
Eu sei como fazer usando o modo convencional, mas queria carregar a dll para um THandle e abrir o form a partir do THandle, assim
logo apos eu poderia dar um Free no THandle e liberar da memria!
alguma dica???
abrao

Responder Citar

Mais posts
Ermindo - 07 mar 2006

Ol,
vc poderia fazer o seguinte:
Na DLL, poderia criar uma preocedure tipo:
Procedure Proc;stdcall;
begin
Form1:=Tform1.create(application);
Form1.showmodal;
Form1.release;
end;

e no seu Aplicativo, poderia criar uma procedure:


var HD: THandle;
proc :function:string; stdcall;
begin
HD:= LoadLibrary(lib.dll);
if HD <> 0 then
begin
@proc := GetProcAddress(hd, Poc);
if @proc <> nil then
proc;

CDIGOS freelibrary(HD);
FRUM

JOBS

ASSINE MVP

Baixe o APP

Login

end;
end;

http://www.devmedia.com.br/forum/abrir-form-dll-usando-loadlibrary/315166

Pgina 1 de 5

Abrir Form DLL usando LoadLibrary - Frum DevMedia

19/09/16 11:16 AM

[]s
Ermindo Lopes

0 |0

Responder Citar

EnioRM - 13 mar 2006


#cdigo
procedure(TForm1.Button1Click(Sender:(TObject);(
var(HD:(THandle;(
proc(:function:string;(stdcall;(
begin(
(
HD:=(LoadLibrary(lib.dll);(
if(HD(<>(0(then(
begin(
(
@proc(:=(GetProcAddress(hd,(Poc);(
if(@proc(<>(nil(then(
proc;(
(
freelibrary(HD);(
(
end;(
(
end;

O cdigo acima funciona, mas qdo a Dll que est na var THandle liverada:
FreeLibrary(HD);

O aplicativo gera um erro, run-time error, ento, se eu remover essa linha, funciona perfeitamente!!!!!
Porque ser?
abrao

0 |0

Responder Citar

Ermindo - 14 mar 2006

pasei pelo mesmo problema e descobri q precisa declarar o Sharemem como primeira clausula do Uses no *.DPR e naum no Form da
aplicao principal.
[]1 Ermindo

0 |0

Responder Citar

Ermindo - 14 mar 2006

passei pelo mesmo problema e descobri q precisa declarar o Sharemem como primeira clausula do Uses no *.DPR e naum no Form da
aplicao principal.
[] Ermindo

0 |0

Responder Citar

Ermindo - 14 mar 2006

passei pelo mesmo problema e descobri q precisa declarar o Sharemem como primeira clausula do Uses no *.DPR e naum no Form da
aplicao principal.
[] Ermindo

0 |0

Responder Citar

http://www.devmedia.com.br/forum/abrir-form-dll-usando-loadlibrary/315166

Pgina 2 de 5

Abrir Form DLL usando LoadLibrary - Frum DevMedia

19/09/16 11:16 AM

Martins - 14 mar 2006

citao:
passei pelo mesmo problema e descobri q precisa declarar o Sharemem como primeira clausula do Uses no *.DPR e naum no
Form da aplicao principal.
[] Ermindo

Se vc vai usar ShareMem, inclua da DLL e no DPR OK!!


0 |0

Responder Citar

EnioRM - 15 mar 2006

O problema continua,
ja coloquei o ShareMem, e MidasLib tanto do DPR da dll como na aplicao .exe que vai chamar a dll mas ainda acontece erro de
violao qdo fecho o form/dll e uso o FreeLibrary.
falow+

0 |0

Responder Citar

EnioRM - 15 mar 2006

O problema continua,
ja coloquei o ShareMem, e MidasLib tanto do DPR da dll como na aplicao .exe que vai chamar a dll mas ainda acontece erro de
violao qdo fecho o form/dll e uso o FreeLibrary.
falow+

0 |0

Responder Citar

Martins - 15 mar 2006

citao:
O problema continua,
ja coloquei o ShareMem, e MidasLib tanto do DPR da dll como na aplicao .exe que vai chamar a dll mas ainda acontece erro
de violao qdo fecho o form/dll e uso o FreeLibrary.
falow+

Enio, vc poderia postar aqui os cabealhos de sua DLL e de seu DPR do projeto, bem como a chamada dinmica a sua DLL?Valew!!
0 |0

Responder Citar

EnioRM - 15 mar 2006

Procedimento pra chamar o form (na dll)


#cdigo

http://www.devmedia.com.br/forum/abrir-form-dll-usando-loadlibrary/315166

Pgina 3 de 5

Abrir Form DLL usando LoadLibrary - Frum DevMedia

19/09/16 11:16 AM

uses
((ShareMem,
((MidasLib,
((SysUtils,
((Classes,
((Forms,
((U_Funcoes(in(..\U_Funcoes.pas,
((U_Mensagem(in(..\U_Mensagem.pas({F_Mensagem},
(
.........
(
procedure(GradeUsuarios;(stdcall;
begin
((Application.CreateForm(TF_GradeUsuarios,F_GradeUsuarios);
((F_GradeUsuarios.ShowModal;
((F_GradeUsuarios.Release;
end;
(
exports
((GradeUsuarios;

Agora, no projeto dpr do .exe


program CTI_Informatica;
#cdigo
uses
((ShareMem,
((MidasLib,
((Forms,
((U_Principal(in(U_Principal.pas({Form1},
((UDataModulo(in(..\UDataModulo.pas({DataModule1:(TDataModule},
((U_ReconcileError(in(..\U_ReconcileError.pas({ReconcileErrorForm};

na Unit principal, uso o procedimento para chamar a dll:


#cdigo
procedure(TForm1.CallDLL(LibName,(Procedimento:(String);
var
((DLL(:(THandle;
((proc(:(procedure;(stdcall;
begin
((DLL(:=(LoadLibrary(PChar(LibName));
((if((DLL(<>(0)(then(begin
((((proc(:=(GetProcAddress(DLL,PChar(Procedimento));
((((if((@proc(<>(Nil)(then
((((((proc;
((end;
//((FreeLibrary(DLL);
end;

e para chamar o form eu uso no evento OnClick:


#cdigo
CallDll(cti_usuarios.dll,GradeSetores);

0 |0

Responder Citar

Martins - 16 mar 2006

citao:
Colega, pode ser que eu esteja enganado, mas tente criar seu form assim:
procedure GradeUsuarios; stdcall;
begin
F_GradeUsuarios := TF_GradeUsuarios.Create( Nil );
F_GradeUsuarios.ShowModal;
F_GradeUsuarios.Release;
end;

Da forma como est descrita acima, quando o form fechado ele automaticamente liberado da memria, no ficando dependente da
liberao da aplicao. Pq ao q parece, ao liberar a DLL com freelibrary(HD); ainda existe em memria um form q foi criado dentro da
DLL.

http://www.devmedia.com.br/forum/abrir-form-dll-usando-loadlibrary/315166

Pgina 4 de 5

Abrir Form DLL usando LoadLibrary - Frum DevMedia

19/09/16 11:16 AM

Acho q seria isso, algum poderia corrigir isso por favor, hehe :D
0 |0

Responder Citar

thomaz_prg - 16 mar 2006

Colega, pode ser que eu esteja enganado, mas tente criar seu form assim:
procedure GradeUsuarios; stdcall;
begin
F_GradeUsuarios := TF_GradeUsuarios.Create( Nil );
F_GradeUsuarios.ShowModal;
F_GradeUsuarios.Release;
end;

0 |0

Responder Citar

Voc precisa estar logado para tirar sua dvida. Clique aqui para efetuar seu login.

DevMedia
Publique | Assine | Fale conosco

Curtir Pgina

121 mil curtidas

Seja o primeiro de seus amigos a curtir isso.

Hospedagem web por Porta 80 Web Hosting

http://www.devmedia.com.br/forum/abrir-form-dll-usando-loadlibrary/315166

Pgina 5 de 5