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.