compilar DLL externa no HarBour 3.1

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

Moderador: Moderadores

indusoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 06 Out 2004 17:02

compilar DLL externa no HarBour 3.1

Mensagem por indusoft »

Olá,
preciso usar DLL externa para ECF, TEF, AUTOMAÇÃO, etc.
mas quando compilo o sistema aparece um erro na compilação.

EXEMPLO:

Código: Selecionar todos

nDLL:=LoadLibrary("Bemafi32.dll")
DLLCALL(nDLL,32,"Bematech_FI_LeituraX")
FreeLibrary(nDLL) 
ERRO:
C:\HMG\harbour\lib/libhbw32.a(win_dll.o):win_dll.c:(.text+0xe80): multiplition of HB_FUN_FREELIBRARY
Editado para conter código entre as tags CODE.
indusoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 06 Out 2004 17:02

como linkar a biblioteca HBWIN -lhbwin?

Mensagem por indusoft »

Olá, amigos!
:))

preciso URGENTEMENTE acessar uma DLL externa,
mas está dando um erro:

meu fonte:

Código: Selecionar todos

#DEFINE EMPREXA "teste"
#DEFINE XISTEMA "teste"
#DEFINE QUEBRA	Chr(13)+Chr(10)
#include "Inkey.ch"
#include "minigui.ch"
#include "SETCURS.CH"
#include "BOX.CH"
#include "dbstruct.ch"
#include "hbgtinfo.ch"
#include "hbwin.ch"
#include "hbdyn.ch"
Function Main()
   SET MULTIPLE OFF WARNING
   hDLL:=hb_LibLoad("BEMAFI32.DLL")
   ret:=hb_dynCall( { "Bematech_FI_LeituraX", hDLL,HB_DYN_CALLCONV_STDCALL})
   hb_LibFree(hDLL)
   close all
   QUIT
Return Nil


minha compilação:
----------------------------------------------------------------------------------------------------------------
@ECHO OFF
CLS
if exist %1.exe del %1.exe
if exist %1.exe GOTO ERREXIT
set tpath=%path%
set PATH=c:\HMG\mingw\bin;C:\HMG\MINGW\LIBEXEC\GCC\MINGW32\3.4.5
set MINGW=c:\HMG\mingw
set HRB_DIR=c:\HMG\harbour
set MINIGUI_INSTALL=c:\HMG
if exist %1.rc copy /b %MINIGUI_INSTALL%\resources\minigui.rc+%1.rc+%MINIGUI_INSTALL%\resources\filler _temp.rc >NUL
if exist %1.rc windres -i _temp.rc -o _temp.o

%HRB_DIR%\bin\harbour %1.prg -n -i%HRB_DIR%\include;%MINIGUI_INSTALL%\include;.
gcc -I. -I%HRB_DIR%\include -mno-cygwin -Wall -c %1.c -o%1.o
if exist %1.rc gcc -Wall -o%1.exe %1.o _temp.o -mwindows -L%MINGW%\lib -L%HRB_DIR%\lib -L%MINIGUI_INSTALL%\lib -mno-cygwin -Wl,--start-group -lgui -lgtwin -lgtgui -lminigui -ldll -lsocket -luser32 -lwinspool -lcomctl32 -lcomdlg32 -lgdi32 -lole32 -loleaut32 -luuid -lwinmm -lvfw32 -lwsock32 -lgraph -ledit -lreport -lini -leditex -lcrypt -lhbapollo -lhbbmcdx -lhbbtree -lhbclipsm -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbcurl -lhbfbird -lhbgd -lhbhpdf -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmisc -lhbmsql -lhbmysql -lmysqldll -lhbmzip -lhbnf -lhbodbc -lodbc32 -lhbpcre -lhbpgsql -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbvpdf -lhbw32 -lhbzlib -lrddado -lrddads -lrddcdx -lrddfpt -lrddntx -lxhb -Wl--end-group
if not exist %1.rc gcc -Wall -o%1.exe %1.o %MINIGUI_INSTALL%\resources\minigui.o -mwindows -L%MINGW%\lib -L%HRB_DIR%\lib -L%MINIGUI_INSTALL%\lib -mno-cygwin -Wl,--start-group -lgui -lgtgui -lgtwin -lminigui -ldll -lsocket -luser32 -lwinspool -lcomctl32 -lcomdlg32 -lgdi32 -lole32 -loleaut32 -luuid -lwinmm -lvfw32 -lwsock32 -lgraph -ledit -lreport -lini -leditex -lcrypt -lhbapollo -lhbbmcdx -lhbbtree -lhbclipsm -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbcurl -lhbfbird -lhbgd -lhbhpdf -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmisc -lhbmsql -lhbmysql -lmysqldll -lhbmzip -lhbnf -lhbodbc -lodbc32 -lhbpcre -lhbpgsql -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbvpdf -lhbw32 -lhbzlib -lrddado -lrddads -lrddcdx -lrddfpt -lrddntx -lxhb -Wl--end-group
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: As seguintes mensagens tem o mesmo conteúdo do tópico pre-existente. Favor não abrir novos tópicos se o assunto e o mesmo.
Editado pela última vez por Pablo César em 08 Mai 2012 21:19, em um total de 2 vezes.
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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

como linkar a biblioteca HBWIN -lhbwin?

Mensagem por Pablo César »

Eu compilei sem problema algum na IDE da HMG 3.0.041.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

compilar DLL externa no HarBour 3.1

Mensagem por rochinha »

Amguinho,

O erro se apresenta exatamente na ultima linha, que seria a que tira da memória qualquer ligação com a DLL em uso. Desative a linha, recompile e teste se os comandos estão pelo menos retornando valores.

Veja:

Código: Selecionar todos

? nDLL:=LoadLibrary("Bemafi32.dll")
? DLLCALL(nDLL,32,"Bematech_FI_LeituraX")
// FreeLibrary(nDLL) 
Se a DLL for realmente carrega nDLL conterá um valor numérico. Valor este que passado a função DllCall processa o comando e também lhe retorna um valor que dependendo do resultado lhe indicará a situação do comando, se foi bem sucedido, não ou outra coisa.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

compilar DLL externa no HarBour 3.1

Mensagem por Pablo César »

O erro se apresenta exatamente na ultima linha, que seria a que tira da memória qualquer ligação com a DLL em uso.
É porque o chamado da função liberar a LIB da memória é hb_LibFree(hDLL)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
indusoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 06 Out 2004 17:02

compilar DLL externa no HarBour 3.1

Mensagem por indusoft »

mas amigo,
eu tento compilar e está apresentando o seguinte erro,
como se faltasse alguma linkar alguma lib.

por gentileza veja o erro:
undefined reference to HB_FUN_HB_DYBCALL

*** rsrs, tenho urgência desta solução, se puderem contribuir, ficarei muito grato ***
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

compilar DLL externa no HarBour 3.1

Mensagem por Pablo César »

Sinceramente não conheço esse erro e também não encontrei na internet. O que acho estranho, o seu path Minigui e HMG, tudo muito estranho o seu ambiente.

Você já tentou compilar através da IDE da HMG ? Pois eu, como eu já disse, não tive problema algum em compilar. Você quer que eu disponibilize o executável do seu segundo código ?

Desculpe insistir, mas acredito que você deveria re-instalar o HMG, já tem a ultima versão disponível: http://sourceforge.net/projects/hmg/fil ... e/download que trabalhar com Harbour 3.1 Nightly Build (17406 2012-04-20) e MingW GCC Compiler 4.6.2-1
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
indusoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 06 Out 2004 17:02

compilar DLL externa no HarBour 3.1

Mensagem por indusoft »

primeiramente gostaria de agradecer pela sua ajuda,
eu entrei no link acima, e atualizei minha versão,
mas acho que estou atrapalhado na maneira de gerar meu aplicativo,
você tem um BATCH com um exemplo de como COMPILAR e LINKAR
no HARBOUR?

poderia me fornecer um exemplo?
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

compilar DLL externa no HarBour 3.1

Mensagem por Pablo César »

eu entrei no link acima, e atualizei minha versão
Perfeito ! Então você vai abrir uma pasta e coloque todos os arquivos do teste27.rar (em anexo) descompactando-lo. Você irá encontrar dois arquivos .bat um para compilar com o Harbour que está na pasta C:\hmg.3.0.41 na qual você instalou o HMG e o outro arquivo .bat é para você chamar o projeto na IDE e daí poder compilar.

Note que eu tirei várias coisinhas que tinha a mais naquele seu exemplo (não que fosse esse o erro, apenas estavam demais) e adicionei MsgInfo que irá mostrar na tela o retorno da dll. Veja como ficou:

Código: Selecionar todos

#include "minigui.ch"
#include "hbdyn.ch"

Function Main()
SET MULTIPLE OFF WARNING
If !File("BEMAFI32.DLL")
   MsgStop("Arquivo BEMAFI32.DLL não encontrado !")
   Quit
Endif
hDLL:=hb_LibLoad("BEMAFI32.DLL")
ret:=hb_dynCall( { "Bematech_FI_LeituraX", hDLL,HB_DYN_CALLCONV_STDCALL})
hb_LibFree(hDLL)
MsgInfo(">"+if(ValType(ret)="N",STR(ret),ValType(ret))+"<")
Return Nil
Anexos
Teste27.rar
(744.28 KiB) Baixado 262 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder