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.
Usar DLL criada p/ xHarbour, usando lib gráfica.
Moderador: Moderadores
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Usar DLL criada p/ xHarbour, usando lib gráfica.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
=NuNuNO= Griesbach
- 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.
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... )
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... )
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
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.
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
MySQL c/ SQLRDD
HwGui + GTWVG
-
=NuNuNO= Griesbach
- 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.
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 )
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.
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”...
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”...
- sygecom
- 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.
Fala Eolo,
Tentou em vez de usar a LIB compilar os fontes da LIB junto com seu aplicativo ?
Nota: Fontes em anexo
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
xHarbour.org + Hwgui + PostgreSql
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Usar DLL criada p/ xHarbour, usando lib gráfica.
Ótima idéia Leo, vamos tentar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG