Ler/Gravar em Var que está numa DLL

23/02/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,


Eniorm

Respostas

23/02/2006

Andremuller

só passando na assinatura do método.

se tu usasse packages aí era totalmente transparente


Responder Citar

24/02/2006

Eniorm

só passando na assinatura do método.



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


bye


Responder Citar

24/02/2006

Andremuller

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


Responder Citar

24/02/2006

Eniorm

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


Responder Citar

24/02/2006

Andremuller

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

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:

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?


Responder Citar

24/02/2006

Andremuller

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


Responder Citar