Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
ErivanAlves Novato
Registrado: Sexta-Feira, 26 de Novembro de 2010 Mensagens: 18
|
Enviada: Seg Out 14, 2013 10:33 pm Assunto: Problema com DLL |
|
|
Boa noite pessoal,
Estou construindo uma DLL com duas funções interna, no entanto, uma função precisa da ou em determinado momento, neste momento a função não é reconhecida pela outra.
Como eu faço para fazer estas funções se enxergarem dentro da mesma DLL???
Att. |
|
Voltar ao Topo |
|
|
tiagoshimizu Membro Junior
Registrado: Segunda-Feira, 28 de Setembro de 2009 Mensagens: 329
|
Enviada: Ter Out 15, 2013 12:16 am Assunto: |
|
|
ErivanAlves, criei uma dll rápida aqui com o seguinte conteúdo:
Código: | library ArquivoDLL;
uses
SysUtils,
Classes,
Dialogs;
{$R *.res}
function RetornaTexto(Texto: String): String;
begin
Result := Texto;
end;
procedure MostraMensagem(Mensagem: String); stdcall;
begin
ShowMessage(RetornaTexto(Mensagem));
end;
exports MostraMensagem;
begin
end.
|
Logo após, chamei a dll da seguinte forma e um formulário:
Código: | procedure TForm1.Button1Click(Sender: TObject);
type
TMostraMensagem = procedure(Mensagem: String); stdcall;
var
lHandle: THandle;
Mensg: TMostraMensagem;
begin
try
lHandle := LoadLibrary('ArquivoDLL.dll');
if lHandle <> 0 then
begin
Mensg := GetProcAddress(lHandle, 'MostraMensagem');
if @Mensg <> nil then
Mensg('Funções funcionando OK!');
end
else
ShowMessage('Erro ao carregar ArquivoDLL.dll!');
finally
FreeLibrary(lHandle);
end;
end; |
Funcionou normal!
Qual versão do delphi está utilizando? Poderia colocar parte da rotina? Em vários outros projetos utilizei desta forma e não tive problemas.
Gera algum erro na compilação? |
|
Voltar ao Topo |
|
|
ErivanAlves Novato
Registrado: Sexta-Feira, 26 de Novembro de 2010 Mensagens: 18
|
Enviada: Ter Out 15, 2013 8:33 am Assunto: |
|
|
Paras eu testei o seu código aqui
Muito obrigado, eu olhei sei código e descobri meu erro.
Eu criei a primeira função chamando a segunda e acho que isso não pode acontecer.
Agora funcionou.
Há meu delphi é o Xe |
|
Voltar ao Topo |
|
|
GustavoToyota Profissional
Registrado: Domingo, 9 de Outubro de 2011 Mensagens: 605 Localização: Sorocaba - SP
|
Enviada: Ter Out 15, 2013 10:12 am Assunto: |
|
|
ErivanAlves escreveu: | Eu criei a primeira função chamando a segunda e acho que isso não pode acontecer. |
Aí eu fiquei curioso. Fiz assim:
Código: | library Project1;
uses
SysUtils,
Classes,
Vcl.Dialogs;
{$R *.res}
var
Rtn: function (Texto: String): String;
procedure MostraMensagem(Mensagem: String); stdcall;
begin
ShowMessage(Rtn(Mensagem));
end;
function RetornaTexto(Texto: String): String;
begin
Result := Texto;
end;
exports MostraMensagem;
begin
Rtn := RetornaTexto;
end. |
Se alguém souber de outra forma poste por favor. |
|
Voltar ao Topo |
|
|
|