Array
(
)

Ler/Gravar em Var que está numa DLL

Eniorm
   - 23 fev 2006

Pessoal,

tenho algumas variáveis (integer, string) em uma unit que está dentro de uma DLL,

como faço pra ler ou gravar nessas variáveis???

abraço,


Andremuller
   - 23 fev 2006

só passando na assinatura do método.

se tu usasse packages aí era totalmente transparente


0
|
0

Eniorm
   - 24 fev 2006


Citação:
só passando na assinatura do método.



e neste caso como devo proceder?
teria uma explicação desse funcionamento?


bye


0
|
0

Andremuller
   - 24 fev 2006

você tem a assinatura de método que está exportando. Nessa assinatura inclui os parâmetros que precisa. Foi?


0
|
0

Eniorm
   - 24 fev 2006


Citação:
você tem a assinatura de método que está exportando. Nessa assinatura inclui os parâmetros que precisa. Foi?


Amigo, me desculpe pela ignorância, mas não estou acostumado a trabalhar com DLLs, poderia me dar um exemplo de código?

Abraço


0
|
0

Andremuller
   - 24 fev 2006

No dpr da tua dll tu exporta métodos, tipo:

#Código

library TesteDll;

(...)

procedure MostrarMensagem(WndHandle: THandle; Mensagem: string);
var
frm: TFormMensagem;
begin
Application.Handle := WndHandle;
frm := TFormMensagem.Create(nil);
try
frm.ShowModal;
finally
frm.Free;
end;
end;

exports MostrarMensagem;

begin
end.


na tua aplicação tu carrega os métodos, tipo:

#Código
procedure TForm1.ExecutarMensagem;
var
Handle: THandle;
MM: procedure(WndHandle: THandle; Mensagem: string);
begin
Handle := 0;
try
Screen.Cursor := crHourGlass;
Handle := LoadLibrary(PAnsiChar(´TesteDll.dll´));
if Handle = 0 then
ShowMessage(´Não carregou.´)
else
begin
MM := GetProcAddress(Handle, ´MostrarMensagem´);
MM(Application.Handle, Edit1.Text);
end;
finally
FreeLibrary(Handle);
Screen.Cursor := crDefault;
end;
end;


O Handle que eu passo no exemplo é para a dll aparecer na mesma janela da aplicação principal. MM é de declaração igual ao método exportado e é através dele que disparamos o que está na dll.

Então se tu precisar passar mais alguma coisa na dll inclui junto dos parâmetros. No exemplo só passo Mensagem: string, mas poderia ser Mensagem1, Mensagem2: string, o que também mudaria a declaração de MM.

Foi?


0
|
0

Andremuller
   - 24 fev 2006

não esqueça de que a unit ShareMem deve ser a primeira unit declarada nos dois dprs


0
|
0