Página 1 de 1
Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 18 Fev 2011 12:40
por alaminojunior
Algum dos colegas sabería algo sobre utilizar uma DLL criada pelo xHarbour ?
Lembrando que: a DLL foi criada normalmente com hbmake.
Agora:
Sem uso da GTWVT/GTWVG para modo gráfico, o código é compilado, executável gerado e as funções contidas na DLL, funcionam à pleno vapor.
Com uso da GTWVT/GTWVG o código nem compila. Ocorrem erros com menção a GTWVT, alegando funções não encontradas (Unresolved External)
Aguardo notícias.
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 18 Fev 2011 13:06
por =NuNuNO= Griesbach
Olá amigo,
Não cheguei ainda a usar a GTWVT/GTWVG, porém, pela descrição do problema, parece que falta linkar com alguma coisa estática... Ou talvez algum include (.CH/.H) que seja necessário com as definições do GTWVT/GTWVG.
Se você fizer um .PRG que não use a sua DLL e compilar linkando somente a GTWVT/GTWVG ele compila corretamente?
Um grande abraço
=NuNuNO==
( Que já apanhou muito do hbmk2... )
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 18 Fev 2011 13:34
por alaminojunior
Sim, normalmente.
O problema somente ocorre se eu marcar para usar funções contidas dentro da DLL (criada pelo xHarbour), e a utilização de lib gráfica GTWVG/GTWVT.
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 18 Fev 2011 14:09
por =NuNuNO= Griesbach
Buenas... Lembrando das minhas experiências/frustrações com Dlls, talvez eu acerte ou te alguma luz (espero)
Uma vez, adicionei um -lminhalib no arquivo .hbp, querendo adicionar minha DLL, mas, eu havia deixado um libMinhaLib.a que gerei por engano no mesmo diretório. Não sei exatamente o que ele tentava fazer, mas, não compilava de jeito nenhum... (provavelmente não é isto que está acontecendo, mas, não custa verificar)
Outra vez, eu compilei minha dll linkando com:
-lhbmysql
-llibmysql.dll
-lmysqlclient.lib
E quando tentava utiliza-la em um outro PRG, ela gerava milhares de erros sobre funções não definidas. Então, para fazer rodar tive que linkar o PRG também com todas as dependências da minha DLL :-/ (Talvez esse seja seu caso!)
Sem mais lembranças tristes para o momento,
Um grande abraço
=NuNuNO==
( Que espera ter ajudado e não ao contrário )
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 18 Fev 2011 16:17
por Eolo
Não é esse o problema. O problema é na compilação e não no run-time.
1. de um lado, a DLL é criada normalmente com o HBMAKE e, nela, só tem uma função de usuário. Não são chamadas funções existentes em outras DLLs.
2. de outro lado, o EXE que vai chamar essa DLL precisa ser criado para usar a DLL criada com o xHarbour, senão a função HB_LibDo() não funciona.
O que diz o Help do Xharbour (confirmado):
“Important: the EXE file loading the xHarbour DLL with LibLoad() must be created for DLL usage for HB_LibDo() to work properly (compiler switch -usedll, linker switch /DLL).”
3. Primeiro cenário: se o PRG NÃO contiver nenhuma função da WVT e definindo que o EXE vai usar DLLs criadas com o xHarbour, o HBMake cria o EXE e este roda sem problemas em modo console. Ele chama a função de usuário que está na DLL e a executa normalmente.
4. Segundo cenário: se incluir no PRG chamadas a funções da WVT e NÃO definir que o EXE vai usar DLLs criadas com o xHarbour, o EXE funciona em modo gráfico, mas não consegue enxergar a função que está na DLL.
5. A encrenca: quando se tenta misturar as duas coisas, ou seja, criar o EXE para funcionar em modo gráfico (WVT) e acessar a DLL criada com o xHarbour, o HBMake se recusa a criar o EXE, apontando as funções wvt_Core(), wvt_Utils(), wvt_SetTitle() e wvt_SetCodePage() como “unresolved external”...
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 23 Fev 2011 00:22
por sygecom
Fala Eolo,
Tentou em vez de usar a LIB compilar os fontes da LIB junto com seu aplicativo ?
Nota: Fontes em anexo
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Enviado: 23 Fev 2011 00:42
por alaminojunior
Ótima idéia Leo, vamos tentar.