Selecao dinamica de DLL na Unit

Delphi

29/06/2004

Ae moçada...

Eu tenho uma unit que faz chamadas em uma DLL, só que o problema é : o nome da DLL pode mudar dependendo da ocasião.

Ex:
...
const dll = ´ECFAFRAC.DLL´;
...

implementation

{$R *.DFM}

function Fazalgumacoisa (Var: pchar): Integer; StdCall; External dll;

Então, aqui estou dizendo qual .DLL eu vou usar usando uma contante, a pergunta é : como faço para na declaração da chamada externa na DLL selecionar qual .DLL vou usar ????

[]´s :)

D4N13L


D4n13l

D4n13l

Curtidas 0

Respostas

Nildo

Nildo

29/06/2004

Neste caso você chamar DLLs dinamicamente, utilizando as funções

LoadLibrary para carregar a DLL e retornar um Handle,
e a função GetProcAddress para atribuir uma procedure desta DLL a um ponteiro.

No Google você encontra vários exemplos desta utilização, é só fazer uma pesquisa por: LoadLibrary GetProcAddress Delphi.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

29/06/2004

Usando esse modelo [i:3ffe267111]function Fazalgumacoisa (Var: pchar): Integer; StdCall; External dll; [/i:3ffe267111]
O Delphi inclui qual dll e quais funções no cabeçalho do executável, ao executar, o Windows verific se essa dll existe e as funções, se não encontrar, emite uma mensagem de erro e aborta o programa, até ai vc nem fica sabendo

para carregar as dlls dinamicamente, vc pode fazer assim:

type
  TTipoFuncao = function(parametros: tipo....): tipo;

var
  funcao: TTipoFuncao;
  Dll: THandle;


ai é preciso inicializar isso:

Dll := LoadLibrary(NomeDoArquivodaDLL);
funcao := GetProcAddress(Dll, ´NomedaFuncao´);


e no fim, liberar a dll

FreeLibrary(Dll);


de uma olhada nesse exemplo:
http://www.clubedelphi.com.br/aplicativos/keylogger.zip


GOSTEI 0
D4n13l

D4n13l

29/06/2004

uma vez já fiz esse tipo de chamada, é que gostaria de alguma coisa na declaração, mais vou fazer desse jeito....
Valeu



Neste caso você chamar DLLs dinamicamente, utilizando as funções LoadLibrary para carregar a DLL e retornar um Handle, e a função GetProcAddress para atribuir uma procedure desta DLL a um ponteiro. No Google você encontra vários exemplos desta utilização, é só fazer uma pesquisa por: LoadLibrary GetProcAddress Delphi.



GOSTEI 0
POSTAR