Ler/Gravar em Var que está numa DLL
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,
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
Curtidas 0
Respostas
Andremuller
23/02/2006
só passando na assinatura do método.
se tu usasse packages aí era totalmente transparente
se tu usasse packages aí era totalmente transparente
GOSTEI 0
Eniorm
23/02/2006
só passando na assinatura do método.
e neste caso como devo proceder?
teria uma explicação desse funcionamento?
bye
GOSTEI 0
Andremuller
23/02/2006
você tem a assinatura de método que está exportando. Nessa assinatura inclui os parâmetros que precisa. Foi?
GOSTEI 0
Eniorm
23/02/2006
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
GOSTEI 0
Andremuller
23/02/2006
No dpr da tua dll tu exporta métodos, tipo:
na tua aplicação tu carrega os métodos, tipo:
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?
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?
GOSTEI 0
Andremuller
23/02/2006
não esqueça de que a unit ShareMem deve ser a primeira unit declarada nos dois dprs
GOSTEI 0