Usar DLL criada p/ xHarbour, usando lib gráfica.

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

Moderador: Moderadores

Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem 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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
=NuNuNO= Griesbach
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 10 Fev 2011 18:18
Localização: Curitiba/PR
Contato:

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem 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... )
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem 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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
=NuNuNO= Griesbach
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 10 Fev 2011 18:18
Localização: Curitiba/PR
Contato:

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem 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 )
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem 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”...
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem por sygecom »

Fala Eolo,
Tentou em vez de usar a LIB compilar os fontes da LIB junto com seu aplicativo ?

Nota: Fontes em anexo
Anexos
wvt.rar
(68.18 KiB) Baixado 125 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Usar DLL criada p/ xHarbour, usando lib gráfica.

Mensagem por alaminojunior »

Ótima idéia Leo, vamos tentar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Responder