ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problema com DLL

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
ErivanAlves
Novato
Novato


Registrado: Sexta-Feira, 26 de Novembro de 2010
Mensagens: 18

MensagemEnviada: Seg Out 14, 2013 10:33 pm    Assunto: Problema com DLL Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
tiagoshimizu
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 28 de Setembro de 2009
Mensagens: 329

MensagemEnviada: Ter Out 15, 2013 12:16 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
ErivanAlves
Novato
Novato


Registrado: Sexta-Feira, 26 de Novembro de 2010
Mensagens: 18

MensagemEnviada: Ter Out 15, 2013 8:33 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
GustavoToyota
Profissional
Profissional


Registrado: Domingo, 9 de Outubro de 2011
Mensagens: 605
Localização: Sorocaba - SP

MensagemEnviada: Ter Out 15, 2013 10:12 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB