xharbour + MSVC 2022 - 64 bits

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

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

xharbour + MSVC 2022 - 64 bits

Mensagem por sygecom »

Olá Pessoal.

Estou com dois erros em xharbour(atual git) + msvc 2022 64 bits.

Esse erro abaixo é por que tenho o meu ErrorSys e tem o do xharbour, até posso renomear o meu e resolver, mas achei estranho que esse erro não acontece com BCC.
rtl.lib(errorsys.obj) : error LNK2005: HB_FUN_ERRORSYS already defined in errorsys.obj

Esses erros abaixo é por que não existe para 64 bits a FUNCTION DLLCALL e, conferi no source do xharbour e realmente tem um ifdef para apenas 32 bits, alguém sabe como contornar isso em 64 bits no xharbour ?

Código: Selecionar todos

sagi_cancela_toledo.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
sagi_email.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
ACBrBoleto.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
syg_uteis_xhb_msvc64.lib(webcam.obj) : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
balancas.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
five.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
sagi_biometria.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
sagi_cameras.obj : error LNK2001: unresolved external symbol HB_FUN_DLLCALL
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

xharbour + MSVC 2022 - 64 bits

Mensagem por JoséQuintas »

Temporário ou definitivo ?

Como temporário, é criar uma função fake pra tapar buraco.
Isso vai impedir de chamar rotinas em DLL, mas pelo menos deixa você testar todo restante.
Se todo restante ok, aí vai atrás dessa.
Acho que vai precisar CALLDLL diferente pra DLLs 32/64 bits, supondo que aceite chamar 32 a partir de 64, não sei dizer se isso é possível.

Quanto ao outro erro, de errorsys duplicado....
É que o Borland C aceita tudo duplicado e por isso não dá erro.
No mingw tem como passar parâmetro pra ele aceitar isso.
No MSVC não sei se tem.

No mingw também acusa resource duplicado, era normal ter erro conforme a LIB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

xharbour + MSVC 2022 - 64 bits

Mensagem por sygecom »

Preciso de algo definitivo, até mesmo pra poder testar se em 64bits vou conseguir consumir as dll que são 32 bits.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

xharbour + MSVC 2022 - 64 bits

Mensagem por JoséQuintas »

pegar da minigui talvez, ou fivewin.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

xharbour + MSVC 2022 - 64 bits

Mensagem por Itamar M. Lins Jr. »

Olá!
Preciso de algo definitivo, até mesmo pra poder testar se em 64bits vou conseguir consumir as dll que são 32 bits.
Reportar para o Enrico Maria Giordano e esperar a resposta dele. Ele está ativo no xHarbour.

Código: Selecionar todos

2024-04-13 12:20 UTC+0200 Enrico Maria Giordano <e.m.giordano@emagsoftware.it>
  * source\compiler\harbour.c
  * source\compiler\genc.c
  * source\compiler\genhrb.c
  * source\vm\runner.c
  * source\rtl\tprinter.c
    ! Fixed compiler warnings
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

xharbour + MSVC 2022 - 64 bits

Mensagem por sygecom »

Venho conversando por e-mail com Enrico a alguns dias e, ele me mandou uma solução que funciona.

Segue abaixo, exemplo:

Código: Selecionar todos

FUNCTION MAIN()

    LOCAL cPath := GETENV( "CommonProgramFiles(x86)" )

    ? cPath
    ? LFN2SFN( cPath )

    INKEY( 0 )

    RETURN NIL


FUNCTION LFN2SFN( cDir )

    LOCAL cBuffer := SPACE( 261 )
    LOCAL nLen    := GETSHORTPATHNAME( cDir, @cBuffer, LEN( cBuffer ) )

    RETURN IF( nLen != NIL, LEFT( cBuffer, nLen ), cBuffer )


#define DC_CALL_CDECL 0x0010


FUNCTION GETSHORTPATHNAME( cPar1, cPar2, nPar3 )

    LOCAL nHandle := DLLLOAD( "Kernel32.dll" )
    LOCAL nRet := 0

    IF !EMPTY( nHandle )
        nRet = DLLCALL( nHandle, DC_CALL_CDECL, "GetShortPathNameA", cPar1, cPar2, nPar3 )
    ENDIF

    DLLUNLOAD( nHandle )

    RETURN nRet

#command IF <condition> THEN <*statements*> => if <condition> ; <statements> ; end


FUNCTION DLLCALL( nHandle, nDummy, cFuncName, xPar1, xPar2, xPar3, xPar4, xPar5, xPar6, xPar7, xPar8, xPar9, xPar10, xPar11, xPar12 )

    LOCAL cTyp1  := "C"
    LOCAL cTyp2  := "C"
    LOCAL cTyp3  := "C"
    LOCAL cTyp4  := "C"
    LOCAL cTyp5  := "C"
    LOCAL cTyp6  := "C"
    LOCAL cTyp7  := "C"
    LOCAL cTyp8  := "C"
    LOCAL cTyp9  := "C"
    LOCAL cTyp10 := "C"
    LOCAL cTyp11 := "C"
    LOCAL cTyp12 := "C"

    ( nDummy )

    IF VALTYPE( xPar1 )  = "N" THEN cTyp1  = "N"
    IF VALTYPE( xPar2 )  = "N" THEN cTyp2  = "N"
    IF VALTYPE( xPar3 )  = "N" THEN cTyp3  = "N"
    IF VALTYPE( xPar4 )  = "N" THEN cTyp4  = "N"
    IF VALTYPE( xPar5 )  = "N" THEN cTyp5  = "N"
    IF VALTYPE( xPar6 )  = "N" THEN cTyp6  = "N"
    IF VALTYPE( xPar7 )  = "N" THEN cTyp7  = "N"
    IF VALTYPE( xPar8 )  = "N" THEN cTyp8  = "N"
    IF VALTYPE( xPar9 )  = "N" THEN cTyp9  = "N"
    IF VALTYPE( xPar10 ) = "N" THEN cTyp10 = "N"
    IF VALTYPE( xPar11 ) = "N" THEN cTyp11 = "N"
    IF VALTYPE( xPar12 ) = "N" THEN cTyp12 = "N"

    RETURN CALLDLL( nHandle, cFuncName, xPar1, cTyp1, xPar2, cTyp2, xPar3, cTyp3, xPar4, cTyp4, xPar5, cTyp5, xPar6, cTyp6, xPar7, cTyp7, xPar8, cTyp8, xPar9, cTyp9, xPar10, cTyp10, xPar11, cTyp11, xPar12, cTyp12 )


#pragma BEGINDUMP

#include "windows.h"
#include "hbapi.h"


HB_FUNC( CALLDLL )
{
    FARPROC pFunc = GetProcAddress( hb_parptr( 1 ), hb_parc( 2 ) );

    void *pPrm1;
    void *pPrm2;
    void *pPrm3;
    void *pPrm4;
    void *pPrm5;
    void *pPrm6;
    void *pPrm7;
    void *pPrm8;
    void *pPrm9;
    void *pPrm10;
    void *pPrm11;
    void *pPrm12;

    pPrm1  = *hb_parc( 4 )  == 'C' ? hb_parc( 3 )  : ( void * ) hb_parnll( 3 );
    pPrm2  = *hb_parc( 6 )  == 'C' ? hb_parc( 5 )  : ( void * ) hb_parnll( 5 );
    pPrm3  = *hb_parc( 8 )  == 'C' ? hb_parc( 7 )  : ( void * ) hb_parnll( 7 );
    pPrm4  = *hb_parc( 10 ) == 'C' ? hb_parc( 9 )  : ( void * ) hb_parnll( 9 );
    pPrm5  = *hb_parc( 12 ) == 'C' ? hb_parc( 11 ) : ( void * ) hb_parnll( 11 );
    pPrm6  = *hb_parc( 14 ) == 'C' ? hb_parc( 13 ) : ( void * ) hb_parnll( 13 );
    pPrm7  = *hb_parc( 16 ) == 'C' ? hb_parc( 15 ) : ( void * ) hb_parnll( 15 );
    pPrm8  = *hb_parc( 18 ) == 'C' ? hb_parc( 17 ) : ( void * ) hb_parnll( 17 );
    pPrm9  = *hb_parc( 20 ) == 'C' ? hb_parc( 19 ) : ( void * ) hb_parnll( 19 );
    pPrm10 = *hb_parc( 22 ) == 'C' ? hb_parc( 21 ) : ( void * ) hb_parnll( 21 );
    pPrm11 = *hb_parc( 24 ) == 'C' ? hb_parc( 23 ) : ( void * ) hb_parnll( 23 );
    pPrm12 = *hb_parc( 26 ) == 'C' ? hb_parc( 25 ) : ( void * ) hb_parnll( 25 );

    hb_retnl( ( LONG ) ( *pFunc ) ( pPrm1, pPrm2, pPrm3, pPrm4, pPrm5, pPrm6, pPrm7, pPrm8, pPrm9, pPrm10, pPrm11, pPrm12 ) );
}

#pragma ENDDUMP
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder