Fórum Como carregar uma dll dinamicamente? #212013
06/02/2004
0
Usando o método de carregamento estático tudo funciona ok.
Mas agora quero carregar dinamicamente a dll. Sei que devo usar o processo Loadlibrary.
Mas não consigo executar as procedures que recebem parâmetros e nem as funções.
Vejam como faço:
type
ExecutaPrograma = procedure (PindicePrg : Integer);
implementation
procedure TForm1.listaClick(Sender: TObject);
var
Area : Integer;
Handle : THandle;
begin
Handle := LoadLibrary (´cortedll.dll´);
if Handle <> 0 then
begin
@ExecutaPrograma := GetProcAddress (Handle, ´ExecutaPrograma´);
if @ExecutaPrograma <> nil then
begin
ExecutaPrograma(lista.Selected.index);
end;
FreeLibrary (Handle);
end;
end;
Na hora de compilar ele dá erro dizendo que
´(´ expected but ´:=´ found. Na linha
@ExecutaPrograma := GetProcAddress (Handle, ´ExecutaPrograma´);
Como faço para executar esta procedure ou qq rotina que receba parametros?
Aledeol
Curtir tópico
+ 0Posts
06/02/2004
Beppe
Gostei + 0
06/02/2004
Aledeol
Me diz uma coisa, antes de dar o freelibray eu posso executar outras funções dentro desta dll?
Gostei + 0
06/02/2004
Beppe
Gostei + 0
26/08/2004
Czapelini
Fiz exatamente como vcs indicaram, mas está dando um erro na linha
LibHandle := LoadLibrary (´DllInscE32.Dll´).
Dá o erro dizendo que ´F´ não eh um valor inteiro... e em nehum momento existe F....
Alguém tem idéia do que pode ser?
Obrigado
Gostei + 0
26/08/2004
Beppe
Gostei + 0
26/08/2004
Alexandremarcondes
Esa aprte deveria ser assim:
begin ExecutaPrograma := GetProcAddress (Handle, ´ExecutaPrograma´); if @ExecutaPrograma <> nil then begin ExecutaPrograma(lista.Selected.index); end; FreeLibrary (Handle); end;
Gostei + 0
26/08/2004
Ipc$
Quando vc utiliza por ex: @String, vc tem o endereço de memória da variável tipo String.
Para vc ter o endereço de memória da [b:a5131feab2]variável[/b:a5131feab2] ExecutaPrograma, vc tem que utilizar [b:a5131feab2]@@[/b:a5131feab2]ExecutaPrograma.
[/b]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)