Função CallDLL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

rodrmigu
Usuário Nível 3
Usuário Nível 3
Mensagens: 150
Registrado em: 27 Nov 2007 15:13
Localização: Indaiatuba SP

Mensagem por rodrmigu »

Só uma correção nos termos, na linha typedef, é a criação de um tipo de dado baseado em protótipo de função para pointeiro.

:D

[]'s
Rodrigo
paulobergo
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 09 Nov 2007 08:54
Localização: Juiz de Fora-MG

Mensagem por paulobergo »

Ok Rodrigo, ok...

Mais uma vez... grato pela dica...

Observei, já algumas coisas...

A função não gera erro após o "retorno do foco" para o executável clipper se usar StdCall na declaração da função... se usar Export, causa falha...

Mantendo StdCall, outras aplicações (principalmente outras dll's resource feitas nos Delphi 6 ou 4) não consegem chamar as mesmas funções... mas tudo bem... isso é contornável...

O mais importante é que consegui criar uma dll bem simples com um TDatabase e um TQuery para acessar as tabelas MySQL... e até o momento deu certo...

Agora, já querendo explorar um pouquinho mais... como definir outra função em C no bloco?

Mais ou menos assim?

Código: Selecionar todos

#PRAGMA BEGINDUMP 

#include "hbapi.h" 
#include "windows.h" 

typedef LPSTR (WINAPI *_SNADAFAZ)      ( LPSTR snada, INT num ); 

HB_FUNC( NADAFAZ ) 

{ 
    HINSTANCE handle = LoadLibrary("minhadll.dll"); 
    ... conteúdo da função NadaFaz
    } 
} 

#PRAGMA ENDDUMP

Código: Selecionar todos

#PRAGMA BEGINDUMP 

#include "hbapi.h" 
#include "windows.h" 

typedef LPSTR (WINAPI *_SNADAFAZ)      ( LPSTR snada, INT num ); 

HB_FUNC( TUDOFAZ ) 

{ 
    HINSTANCE handle = LoadLibrary("outradll.dll"); 
    ... conteúdo da função TUDOFAZ
    } 
} 

#PRAGMA ENDDUMP


?
Mais uma vez, grato pela atenção!

Abraços!
Editado pela última vez por Pablo César em 24 Mai 2012 20:13, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Não se vê bem com insolação... é essencial cobrir os olhos...
rodrmigu
Usuário Nível 3
Usuário Nível 3
Mensagens: 150
Registrado em: 27 Nov 2007 15:13
Localização: Indaiatuba SP

Mensagem por rodrmigu »

Ola,

eu coloquei um exemplo completo das rotinas que uso, da uma olhadinha logo no começo deste topico.

[]'s
Rodrigo
rodrmigu
Usuário Nível 3
Usuário Nível 3
Mensagens: 150
Registrado em: 27 Nov 2007 15:13
Localização: Indaiatuba SP

Re: Uma luz no fim do túnel?

Mensagem por rodrmigu »

paulobergo escreveu:C

Código: Selecionar todos

HINSTANCE handle = LoadLibrary("D:\DOWNLOAD\SIA\FAZNADA.DLL"); 
Não funcionou
Em C, tentat fazer assim: D:\\download\\sia\\faznada.dll"

ou passa o nome da .dll como um parametro, dai vc pode passar o path normalmente.

[]'s
Rodrigo
Responder