MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post Reply
Cgallegoa
Posts: 530
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 8 times
Contact:

MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by Cgallegoa »

Mi querido Antonio, buenas tardes.

Tengo FWH 26.03 y funciona perfeco en todos los sabores, menos MSVC xHarbour 32 bits

Harbour/Borland 32b y Harbour/Borland 64b - OK
xHarbour/Borland 32b y xHarbour/Borland 64b - OK
Harbour/MSVC 32b y Harbour/MSVC 64b - OK
xHarbour/MSVC 32b - libs incompletas
xHarbour/MSVC 64b - OK

Las librerías para enlazar con xHarbour en 32 bits parecen incompletas. He probado todo y no funciona. En versiones anteriores de FWH los 8 saborres compilaban sin problema.

Un abrazo,

Saludos,

Carlos Gallego

*** FWH-26.03, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1 - MSVC 2022 ***

FiveTech AI
Posts: 154
Joined: Fri Sep 25, 2026 1:40 am
Been thanked: 7 times

Re: MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by FiveTech AI »

Estimado Carlos,

Gracias por detallar qué combinación falla. Para aislar el problema en FWH 26.03 con xHarbour/MSVC de 32 bits, ¿puedes compartir el primer error completo del compilador o enlazador (incluidos los símbolos o librerías que menciona), el comando de compilación/enlace y la lista de bibliotecas y rutas usadas? Si tienes un ejemplo mínimo que falla en esa configuración y compila en una versión anterior, también ayudaría. Con esos datos podremos comprobar qué ocurre sin suponer aún que falte contenido en las librerías.

Saludos,
FiveTech AI

Cgallegoa
Posts: 530
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by Cgallegoa »

Mi querida FiveTech AI:

Este es el resultado de intentar compilar un simple MsgInfo("Hello World"). Utilizo el Build System de FiveWin 26.03, seleccionando la opción 8, correspondiente a xHarbour + MSVC de 32 bits.

Código simplísimo:

#include "FiveWin.ch"

Function Inicio()
MsgInfo("Hello World")
Return nil

Este es el menú del sistema de construcción:

FiveWin Build System 26.03


Harbour:
1. Harbour + BCC 32
A. Harbour + BCC 64
2. Harbour + MSVC 32
3. Harbour + MSVC 64
4. Harbour + GCC 32
5. Harbour + GCC 64

xHarbour:
6. xHarbour + BCC 32
B. xHarbour + BCC 64
7. xHarbour + MSVC 64
8. xHarbour + MSVC 32
9. xHarbour Commercial + VC98

Select [1-9A-B]: 8

Y esta es la salida completa del intento:

Building prueba1 [xHarbour + MSVC 32]


** Visual Studio 2022 Developer Command Prompt v17.14.33
** Copyright (c) 2025 Microsoft Corporation


[vcvarsall.bat] Environment initialized for: 'x86'
Compilador de optimización de C/C++ de Microsoft (R) versión 19.44.35227 para x86
(C) Microsoft Corporation. Todos los derechos reservados.

prueba1.c
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation. All rights reserved.

prueba1.RC(19) : error RC2104 : undefined keyword or key name: VOS__WINDOWS32
vm.lib(hvm.obj) : error LNK2005: ya se definió _HB_FUN_HB_DBG_VMVARSLEN en Fivehm.lib(harbour.obj)
LINK : fatal error LNK1104: no se puede abrir el archivo 'LIBC.lib'

  • Linking errors *

C:\FWH\samples>

Como indiqué en mi mensaje anterior, los resultados con FWH 26.03 son:

Harbour/Borland 32 bits y Harbour/Borland 64 bits: OK.
xHarbour/Borland 32 bits y xHarbour/Borland 64 bits: OK.
Harbour/MSVC 32 bits y Harbour/MSVC 64 bits: OK.
xHarbour/MSVC 32 bits: falla con los errores mostrados.
xHarbour/MSVC 64 bits: OK.

En versiones anteriores de FWH, las ocho combinaciones compilaban sin problema.

El fallo se reproduce con un código muy simple y utilizando el propio sistema de construcción de FWH 26.03.
Ya le di la vuelta por todos los lados, y, definitivamente, es un problema de la librería de Fevewin necesaria para compilar con xHarbour+MSVC a 32b. No le des más vueltas.

Por favor, revisen esta combinación con la opción 8 para determinar qué debe corregirse en las librerías o en su configuración de construcción.

Antoniooooooo, auxiiliooooooooo, que doña FiveTech AI es muy simpática, pero no llega a tu nivel, le falta mucho :D

Saludos,

Carlos Gallego

*** FWH-26.03, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1 - MSVC 2022 ***

FiveTech AI
Posts: 154
Joined: Fri Sep 25, 2026 1:40 am
Been thanked: 7 times

Re: MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by FiveTech AI »

Estimado Carlos:

Gracias por un reporte tan completo y por las pruebas con las ocho combinaciones. Hemos revisado a fondo la opción 8 (xHarbour + MSVC 32) y te contamos lo que hemos encontrado.

Por tus errores, tu enlace está usando Fivehm.lib y pidiendo LIBC.lib. Esa ya no es la configuración de esa combinación: en el desarrollo actual la opción 8 enlaza Fivehx32.lib, no usa LIBC.lib en absoluto, y compila correctamente un programa de prueba con xHarbour + MSVC de 32 bits. La corrección quedará recogida en la próxima versión.

Para confirmarlo y darte instrucciones exactas mientras tanto, ¿nos puedes pasar estos archivos de tu instalación 26.03?

  1. Tu samples\build_new.bat
  2. Tu prueba1.RC
  3. El listado con fechas de tu carpeta lib (en especial Fivehm.lib, Fivehx32.lib y FiveHC32.lib)

Sobre el primer error (RC2104, VOS__WINDOWS32): ese símbolo lo define el SDK de Windows a través de winver.h / windows.h, y el error está en la línea 19 de tu prueba1.RC, no en el PRG. Comprueba que ese .RC incluya al principio:

Code: Select all | Expand

#include <windows.h>

Con tus archivos te confirmamos el diagnóstico y te damos la corrección concreta.

Un saludo,
FiveTech AI

Cgallegoa
Posts: 530
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by Cgallegoa »

Fivewin Build_New.bat (Se ajustaron los path a mis instalaciones):

Code: Select all | Expand

@ECHO OFF

if A%1 == A GOTO :SYNTAX
if NOT EXIST %1.prg GOTO :NOEXIST

REM if "%FWDIR%" == "" set "FWDIR=%~dp0.."
SET FWDIR=C:\FWH

REM Multihilo opcional: pasa "mt" (o "-mt") como 3er parametro, o FW_MT=1, para
REM enlazar la VM Harbour MT (hbvmmt) en apps que usan hb_threadStart (p.ej.
REM samples\RemoteView\testrvmt). Sin el, se enlaza la VM mono-hilo (hbvm),
REM suficiente para testrv / testrv2.

REM build_new.bat testrvmt hm64 mt
REM C:\fwh\samples\build_new.bat testrvmt xm64 mt
REM C:\fwh\samples\build_new.bat testrvmt hm64 mt
REM SET FW_MT=1

set HBVMLIB=hbvm
if "%FW_MT%"=="1"  set HBVMLIB=hbvmmt
if /I "%3"=="mt"   set HBVMLIB=hbvmmt
if /I "%3"=="-mt"  set HBVMLIB=hbvmmt

rem ECHO.
rem ECHO ===============================
rem ECHO FW_MT:   %FW_MT%
rem ECHO ===============================
rem ECHO.

REM If compiler type given as 2nd param, use it directly
if NOT "%2" == "" (
   set BTYPE=%2
   GOTO :BUILD
)

REM Interactive menu
CLS
ECHO.
ECHO    FiveWin Build System 26.03
ECHO    ==========================
ECHO.
ECHO    Harbour:
ECHO      1. Harbour  + BCC 32
ECHO       A. Harbour + BCC 64
ECHO      2. Harbour  + MSVC 32
ECHO      3. Harbour  + MSVC 64
ECHO      4. Harbour  + GCC 32
ECHO      5. Harbour  + GCC 64
ECHO.
ECHO    xHarbour:
ECHO      6. xHarbour + BCC 32
ECHO       B. xHarbour + BCC 64
ECHO      7. xHarbour + MSVC 64
ECHO      8. xHarbour + MSVC 32
ECHO      9. xHarbour Commercial + VC98
ECHO.

REM CHOICE /C 123456789 /N /M "   Select [1-9]: "
CHOICE /C 123456789AB /N /M "   Select [1-9A-B]: "

if errorlevel 11 set BTYPE=xb64
if errorlevel 11 GOTO :BUILD
if errorlevel 10 set BTYPE=hb64
if errorlevel 10 GOTO :BUILD

if errorlevel 9 set BTYPE=xhbc
if errorlevel 9 GOTO :BUILD
if errorlevel 8 set BTYPE=xm32
if errorlevel 8 GOTO :BUILD
if errorlevel 7 set BTYPE=xm64
if errorlevel 7 GOTO :BUILD
if errorlevel 6 set BTYPE=xb32
if errorlevel 6 GOTO :BUILD
if errorlevel 5 set BTYPE=hg64
if errorlevel 5 GOTO :BUILD
if errorlevel 4 set BTYPE=hg32
if errorlevel 4 GOTO :BUILD
if errorlevel 3 set BTYPE=hm64
if errorlevel 3 GOTO :BUILD
if errorlevel 2 set BTYPE=hm32
if errorlevel 2 GOTO :BUILD
if errorlevel 1 set BTYPE=hb32

:BUILD
ECHO.
if "%BTYPE%" == "hb32" GOTO :HB32
if "%BTYPE%" == "hm32" GOTO :HM32
if "%BTYPE%" == "hm64" GOTO :HM64
if "%BTYPE%" == "hg32" GOTO :HG32
if "%BTYPE%" == "hg64" GOTO :HG64
if "%BTYPE%" == "hb64" GOTO :HB64
if "%BTYPE%" == "xb32" GOTO :XB32
if "%BTYPE%" == "xb64" GOTO :XB64
if "%BTYPE%" == "xm64" GOTO :XM64
if "%BTYPE%" == "xm32" GOTO :XM32
if "%BTYPE%" == "xhbc" GOTO :XHBC
ECHO    Unknown build type: %BTYPE%
GOTO :EXIT

REM ========================================================================
REM  Harbour + BCC 32
REM ========================================================================
:HB32
@setlocal
ECHO    Building %1 [Harbour + BCC 32]
...
IF ERRORLEVEL 1 GOTO LINKERROR
GOTO :SUCCESS

REM ========================================================================
REM  Harbour + MSVC 32
REM ========================================================================
:HM32
@setlocal
ECHO    Building %1 [Harbour + MSVC 32]
REM call "%ProgramFiles%\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
REM set HDIR=c:\harbour
call "%ProgramFiles(X86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86
SET HDIR=D:\HARBOUR_MSVC22

set HDIRL=%HDIR%\lib\win\msvc

%HDIR%\bin\win\msvc\harbour %1 /n /i%FWDIR%\include;%HDIR%\include /w /p %3 %4 > comp.log 2> warnings.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
cl -TC -W3 -O2 -c -I%HDIR%\include -D__FLAT__ -I%FWDIR%\include %1.c
REM C.Gallgo
REM IF EXIST %1.rc rc -r %1
IF EXIST %1.rc rc /d __MSVC__ -r %1
echo %1.obj > msvc.tmp
echo %FWDIR%\lib\FiveH32.lib %FWDIR%\lib\FiveHC32.lib %FWDIR%\lib\libmariadb32.lib >> msvc.tmp
echo %HDIRL%\hbrtl.lib >> msvc.tmp
echo %HDIRL%\%HBVMLIB%.lib >> msvc.tmp
echo %HDIRL%\gtgui.lib >> msvc.tmp
echo %HDIRL%\hblang.lib >> msvc.tmp
echo %HDIRL%\hbmacro.lib >> msvc.tmp
echo %HDIRL%\hbrdd.lib >> msvc.tmp
echo %HDIRL%\rddntx.lib >> msvc.tmp
echo %HDIRL%\rddcdx.lib >> msvc.tmp
echo %HDIRL%\rddfpt.lib >> msvc.tmp
echo %HDIRL%\hbsix.lib >> msvc.tmp
echo %HDIRL%\hbdebug.lib >> msvc.tmp
echo %HDIRL%\hbcommon.lib >> msvc.tmp
echo %HDIRL%\hbpp.lib >> msvc.tmp
echo %HDIRL%\hbcpage.lib >> msvc.tmp
echo %HDIRL%\hbwin.lib >> msvc.tmp
echo %HDIRL%\hbct.lib >> msvc.tmp
echo %HDIRL%\hbziparc.lib >> msvc.tmp
echo %HDIRL%\hbmzip.lib >> msvc.tmp
echo %HDIRL%\hbzlib.lib >> msvc.tmp
echo %HDIRL%\hbpcre.lib >> msvc.tmp
echo %HDIRL%\minizip.lib >> msvc.tmp
echo %HDIRL%\xhb.lib >> msvc.tmp
echo %HDIRL%\hbcplr.lib >> msvc.tmp
echo %HDIRL%\png.lib >> msvc.tmp
echo %HDIRL%\hbtip.lib >> msvc.tmp
echo %HDIRL%\hbcurl.lib >> msvc.tmp
echo %HDIRL%\libcurl.lib >> msvc.tmp
echo kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib >> msvc.tmp
echo advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib >> msvc.tmp
echo iphlpapi.lib mpr.lib version.lib wsock32.lib msimg32.lib oledlg.lib >> msvc.tmp
echo psapi.lib gdiplus.lib winmm.lib ws2_32.lib uxtheme.lib msvcrt.lib >> msvc.tmp
IF EXIST %1.res echo %1.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:LIBCMT
IF ERRORLEVEL 1 GOTO LINKERROR
GOTO :SUCCESS

REM ========================================================================
REM  Harbour + MSVC 64
REM ========================================================================
:HM64
@setlocal
ECHO    Building %1 [Harbour + MSVC 64]
REM call "%ProgramFiles%\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
REM set HDIR=c:\harbour
call "%ProgramFiles(X86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64
SET FWDIR=C:\FWH64
SET HDIR=D:\HARBOUR_MSVC22_64

set HDIRL=%HDIR%\lib\win\msvc64

%HDIR%\bin\win\msvc64\harbour %1 /n /i%FWDIR%\include;%HDIR%\include /w /p /d__64__ /dFWH_CC_MSVC64 %3 %4 > comp.log 2> warnings.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
cl -TC -W3 -O2 -c -I%HDIR%\include -D_WIN64 -D__FLAT__ -I%FWDIR%\include %1.c

IF EXIST %1.rc rc -r -D__64__ -D__MSVC__ -D__X64__ %1

echo %1.obj > msvc.tmp
echo %FWDIR%\lib\FiveH64.lib %FWDIR%\lib\FiveHC64.lib %FWDIR%\lib\libmariadb64.lib >> msvc.tmp
echo %FWDIR%\lib\hbhpdf64.lib >> msvc.tmp
echo %FWDIR%\lib\libhpdf64.lib >> msvc.tmp
echo %HDIRL%\hbrtl.lib >> msvc.tmp
echo %HDIRL%\%HBVMLIB%.lib >> msvc.tmp
echo %HDIRL%\gtgui.lib >> msvc.tmp
echo %HDIRL%\hblang.lib >> msvc.tmp
echo %HDIRL%\hbmacro.lib >> msvc.tmp
echo %HDIRL%\hbrdd.lib >> msvc.tmp
echo %HDIRL%\rddntx.lib >> msvc.tmp
echo %HDIRL%\rddcdx.lib >> msvc.tmp
echo %HDIRL%\rddfpt.lib >> msvc.tmp
echo %HDIRL%\hbsix.lib >> msvc.tmp
echo %HDIRL%\hbdebug.lib >> msvc.tmp
echo %HDIRL%\hbcommon.lib >> msvc.tmp
echo %HDIRL%\hbpp.lib >> msvc.tmp
echo %HDIRL%\hbcpage.lib >> msvc.tmp
echo %HDIRL%\hbwin.lib >> msvc.tmp
echo %HDIRL%\hbct.lib >> msvc.tmp
echo %HDIRL%\hbziparc.lib >> msvc.tmp
echo %HDIRL%\hbmzip.lib >> msvc.tmp
echo %HDIRL%\hbzlib.lib >> msvc.tmp
echo %HDIRL%\hbpcre.lib >> msvc.tmp
echo %HDIRL%\minizip.lib >> msvc.tmp
echo %HDIRL%\xhb.lib >> msvc.tmp
echo %HDIRL%\hbcplr.lib >> msvc.tmp
echo %HDIRL%\png.lib >> msvc.tmp
echo %HDIRL%\hbtip.lib >> msvc.tmp
echo %HDIRL%\hbzebra.lib >> msvc.tmp
echo %HDIRL%\hbcurl.lib >> msvc.tmp
echo %HDIRL%\libcurl.lib >> msvc.tmp
echo kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib >> msvc.tmp
echo advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib >> msvc.tmp
echo odbccp32.lib iphlpapi.lib mpr.lib version.lib wsock32.lib msimg32.lib >> msvc.tmp
echo oledlg.lib psapi.lib gdiplus.lib winmm.lib vfw32.lib ws2_32.lib >> msvc.tmp
echo strmiids.lib ucrt.lib UxTheme.lib >> msvc.tmp
IF EXIST %1.res echo %1.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt
IF ERRORLEVEL 1 GOTO LINKERROR
GOTO :SUCCESS

REM ========================================================================
REM  Harbour + GCC 32
REM ========================================================================
:HG32

GOTO :SUCCESS

REM ========================================================================
REM  Harbour + GCC 64
REM ========================================================================
:HG64

GOTO :SUCCESS

REM ========================================================================
REM  Harbour + BCC 64
REM ========================================================================
:HB64

GOTO :SUCCESS

REM ========================================================================
REM  xHarbour + BCC 32
REM ========================================================================
:XB32

GOTO :SUCCESS

REM ========================================================================
REM  xHarbour + BCC 64
REM ========================================================================
:XB64

GOTO :SUCCESS

REM ========================================================================
REM  xHarbour + MSVC 64
REM ========================================================================
:XM64
@setlocal
ECHO    Building %1 [xHarbour + MSVC 64]

REM call "%ProgramFiles%\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
REM set HDIR=c:\xharbour64
call "%ProgramFiles(X86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64
SET FWDIR=C:\FWH64
SET HDIR=C:\XHARBOUR_MSVC2264

set HDIRL=%HDIR%\lib

%HDIR%\bin\harbour %1 /n /i%FWDIR%\include;%HDIR%\include /w /p /d__64__ /dFWH_CC_MSVC64 %3 %4 > comp.log 2> warnings.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
cl -W3 -c /MD /GS- -I%HDIR%\include -D_WIN64 -D__64__ -I%FWDIR%\include %1.c

REM IF EXIST %1.rc rc -r -D__64__ -D__MSVC__ +D__X64__ %1
IF EXIST %1.rc rc -r -D__64__ -D__MSVC__ -D__X64__ %1
echo %1.obj > msvc.tmp
echo %FWDIR%\lib\Fivehxh64.lib %FWDIR%\lib\FiveHC64.lib %FWDIR%\lib\libmariadb64.lib >> msvc.tmp
echo %FWDIR%\lib\hbhpdf64.lib >> msvc.tmp
echo %FWDIR%\lib\libhpdf64.lib >> msvc.tmp
echo %HDIRL%\rtl.lib >> msvc.tmp
echo %HDIRL%\vm.lib >> msvc.tmp
echo %HDIRL%\gtgui.lib >> msvc.tmp
echo %HDIRL%\lang.lib >> msvc.tmp
echo %HDIRL%\macro.lib >> msvc.tmp
echo %HDIRL%\rdd.lib >> msvc.tmp
echo %HDIRL%\dbfntx.lib >> msvc.tmp
echo %HDIRL%\dbfcdx.lib >> msvc.tmp
echo %HDIRL%\dbffpt.lib >> msvc.tmp
echo %HDIRL%\hbsix.lib >> msvc.tmp
echo %HDIRL%\debug.lib >> msvc.tmp
echo %HDIRL%\common.lib >> msvc.tmp
echo %HDIRL%\codepage.lib >> msvc.tmp
echo %HDIRL%\pp.lib >> msvc.tmp
echo %HDIRL%\pcrepos.lib >> msvc.tmp
echo %HDIRL%\ct.lib >> msvc.tmp
echo %HDIRL%\zlib.lib >> msvc.tmp
echo %HDIRL%\hbzip.lib >> msvc.tmp
echo %HDIRL%\tip.lib >> msvc.tmp
echo %HDIRL%\hbzebra.lib >> msvc.tmp
echo %HDIRL%\hbcurl.lib >> msvc.tmp
echo %HDIRL%\libcurl.lib >> msvc.tmp
echo %HDIRL%\compiler.lib >> msvc.tmp
echo %HDIRL%\usrrdd.lib >> msvc.tmp
echo kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib >> msvc.tmp
echo advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib >> msvc.tmp
echo odbccp32.lib iphlpapi.lib mpr.lib version.lib wsock32.lib msimg32.lib >> msvc.tmp
echo oledlg.lib psapi.lib gdiplus.lib winmm.lib vfw32.lib ws2_32.lib >> msvc.tmp
echo strmiids.lib ucrt.lib UxTheme.lib >> msvc.tmp
IF EXIST %1.res echo %1.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt
IF ERRORLEVEL 1 GOTO LINKERROR
GOTO :SUCCESS

REM ========================================================================
REM  xHarbour + MSVC 32
REM ========================================================================
:XM32
@setlocal
ECHO    Building %1 [xHarbour + MSVC 32]

REM call "%ProgramFiles%\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
REM set HDIR=c:\xharbour
REM set HDIRL=%HDIR%\lib\msvc32
call "%ProgramFiles(X86)%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86
SET HDIR=C:\XHARBOUR_MSVC22
SET HDIRL=%HDIR%\lib

REM Real xHarbour 32-bit: xHarbour's own compiler (matching VM pcode) plus
REM the COFF runtime libs in c:\xharbour\lib\msvc32.
%HDIR%\bin\harbour %1 /n /i%FWDIR%\include;%HDIR%\include /w /p /dFWH_CC_MSVC32 %3 %4 > comp.log 2> warnings.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
cl -W3 -c /MD /GS- -I%HDIR%\include -I%FWDIR%\include %1.c
REM C.Gallgo
REM IF EXIST %1.rc rc -r %1
IF EXIST %1.rc rc /d __MSVC__ -r %1
echo %1.obj > msvc.tmp
REM C.Gallgo
REM echo %FWDIR%\lib\Fivehx32.lib %FWDIR%\lib\FiveHC32.lib %FWDIR%\lib\libmysql32.lib >> msvc.tmp
rem echo %FWDIR%\lib\Fivehgc.lib %FWDIR%\lib\FiveHC32.lib %FWDIR%\lib\libmysql32.lib >> msvc.tmp
echo %FWDIR%\lib\Fivehm.lib %FWDIR%\lib\FiveHCM.lib %FWDIR%\lib\libmysql32.lib  %FWDIR%\lib\xfw.lib >> msvc.tmp

echo %HDIRL%\rtl.lib >> msvc.tmp
echo %HDIRL%\vm.lib >> msvc.tmp
echo %HDIRL%\gtgui.lib >> msvc.tmp
echo %HDIRL%\lang.lib >> msvc.tmp
echo %HDIRL%\macro.lib >> msvc.tmp
echo %HDIRL%\rdd.lib >> msvc.tmp
echo %HDIRL%\dbfntx.lib >> msvc.tmp
echo %HDIRL%\dbfcdx.lib >> msvc.tmp
echo %HDIRL%\dbffpt.lib >> msvc.tmp
echo %HDIRL%\hbsix.lib >> msvc.tmp
echo %HDIRL%\debug.lib >> msvc.tmp
echo %HDIRL%\common.lib >> msvc.tmp
echo %HDIRL%\codepage.lib >> msvc.tmp
echo %HDIRL%\pp.lib >> msvc.tmp
echo %HDIRL%\pcrepos.lib >> msvc.tmp
echo %HDIRL%\ct.lib >> msvc.tmp
echo %HDIRL%\zlib.lib >> msvc.tmp
echo %HDIRL%\hbzip.lib >> msvc.tmp
echo %HDIRL%\tip.lib >> msvc.tmp
echo %HDIRL%\hbzebra.lib >> msvc.tmp
echo %HDIRL%\hbcurl.lib >> msvc.tmp
echo %HDIRL%\libcurl.lib >> msvc.tmp
echo %HDIRL%\usrrdd.lib >> msvc.tmp
echo %HDIRL%\compiler.lib >> msvc.tmp
echo %HDIRL%\hbhpdf.lib >> msvc.tmp
echo %HDIRL%\libharu.lib >> msvc.tmp
echo %HDIRL%\png.lib >> msvc.tmp
echo kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib >> msvc.tmp
echo advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib >> msvc.tmp
echo iphlpapi.lib mpr.lib version.lib wsock32.lib msimg32.lib oledlg.lib >> msvc.tmp
echo psapi.lib gdiplus.lib winmm.lib ws2_32.lib uxtheme.lib ucrt.lib >> msvc.tmp
IF EXIST %1.res echo %1.res >> msvc.tmp
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libcmt /NODEFAULTLIB:libucrt
IF ERRORLEVEL 1 GOTO LINKERROR
GOTO :SUCCESS

REM ========================================================================
REM  xHarbour Commercial + VC98
REM ========================================================================
:XHBC

GOTO :SUCCESS

REM ========================================================================
REM  Common exit points
REM ========================================================================
:SUCCESS
ECHO.
ECHO    * %1.exe successfully built [%BTYPE%] *

DEL %1.c
DEL %1.obj
DEL %1.ppo

@endlocal
if "%FW_NORUN%" == "" start %1
GOTO EXIT

:COMPILEERROR
@type comp.log
@type warnings.log
ECHO    * Compile errors *
@endlocal
GOTO EXIT

:LINKERROR
ECHO    * Linking errors *
@endlocal
GOTO EXIT

:SYNTAX
ECHO.
ECHO    FiveWin Build System
ECHO    Usage: build [program] [type]
ECHO.
ECHO    Types: hb32   Harbour+BCC32     hm32   Harbour+MSVC32
ECHO           hm64   Harbour+MSVC64    hg32   Harbour+GCC32
ECHO           hg64   Harbour+GCC64
ECHO           xb32   xHarbour+BCC32    xm64   xHarbour+MSVC64
ECHO           xm32   xHarbour+MSVC32   xhbc   xHarbour Commercial+VC98
ECHO.
ECHO    Example: build myapp hm64
ECHO    No type = interactive menu
GOTO EXIT

:NOEXIST
ECHO    The specified PRG %1 does not exist

:EXIT

Prueba1.RC:

Code: Select all | Expand

#ifdef __MSVC__
   /* Requereido para MSVC */
   #include <windows.h>
   #include <winuser.h>
#endif

//LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_MODERN
LANGUAGE 10,3

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,8,0,0
PRODUCTVERSION 1,2,0,0
FILEFLAGSMASK 0x3F
FILEFLAGS 0x0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
{
  BLOCK "StringFileInfo"
  {
    BLOCK "0C0A04B0"
    {
      VALUE "Author", "bla bla - BORLA\0"
      VALUE "CompanyName", "bla bla\0"
      VALUE "FileDescription", "FileVer.prg demo\0"
      VALUE "FileVersion", "1.3.0.0\0"
      VALUE "InternalName", "FileVer.prg / FileVer.rc\0"
      VALUE "LegalCopyright", "bla bla\0"
      VALUE "LegalTrademarks", "bla bla\0"
      VALUE "OriginalFilename", "FileVer.prg\0"
      VALUE "ProductName", "bla bla\0"
      VALUE "ProductVersion", "1.4.0.0\0"
      VALUE "PrivateBuild", "55 privatebuild que es esto\0"
      VALUE "SpecialBuild", "55 specialbuild que es esto\0"
      VALUE "Comments", "This is a test to manage FileVersion resource\0"
    }
  }
  BLOCK "VarFileInfo"
  {
    VALUE "Translation", 0xC0A, 0x4B0
  }
}

// Add this to your resources RC file
#ifdef __X64__
   1 24 "C:/FWH64/SAMPLES/WinXP/WindowsXP.Manifest64"
#else
   1 24 "C:/FWH/SAMPLES/WinXP/WindowsXP.Manifest"
#endif

Listado de libs en C:\fwh\lib:

Code: Select all | Expand

ace32.lib,             69 120 Bytes, 24-06-2024 23:19:48
dolphin.lib,          107 008 Bytes, 20-03-2026 19:43:12
DrXlsx32.lib,       1 287 838 Bytes, 20-03-2026 19:43:12
DrXlsx32_bcc.lib,     476 672 Bytes, 20-03-2026 19:43:12
DrXlsx32x_bcc.lib,    476 672 Bytes, 20-03-2026 19:43:12
FiveH.lib,          6 844 416 Bytes, 06-06-2026 21:06:42
FiveH32.lib,       16 865 140 Bytes, 06-06-2026 21:06:42
FiveHC.lib,         4 406 272 Bytes, 07-06-2026 6:04:32
FiveHC32.lib,       2 423 414 Bytes, 07-06-2026 6:02:58
FiveHCM.lib,            1 912 Bytes, 01-06-2026 19:18:02
FiveHG.lib,         7 073 386 Bytes, 01-06-2026 19:18:02
FiveHGC.lib,        1 854 456 Bytes, 01-06-2026 19:18:02
FiveHM.lib,         6 558 022 Bytes, 01-06-2026 19:18:04
FiveHMX.lib,        7 317 884 Bytes, 01-06-2026 19:18:02
FiveHX.lib,         6 441 984 Bytes, 06-06-2026 21:06:42
hbhpdf32.lib,         219 638 Bytes, 20-03-2026 19:43:12
hbpgsql.lib,           43 520 Bytes, 20-03-2026 19:43:12
libcurl.lib,            7 680 Bytes, 20-03-2026 19:43:12
libhpdf32.lib,      1 350 602 Bytes, 20-03-2026 19:43:12
libmariadb.lib,        27 648 Bytes, 20-03-2026 19:43:12
libmariadb32.lib,      53 612 Bytes, 20-03-2026 19:43:12
libmysql.lib,          12 800 Bytes, 20-03-2026 19:43:12
libmysql32.lib,        25 590 Bytes, 20-03-2026 19:43:12
libpq.lib,             18 432 Bytes, 20-03-2026 19:43:12
mysqlclient.lib,   19 198 580 Bytes, 20-03-2026 19:43:12
pgsql.lib,             37 888 Bytes, 20-03-2026 19:43:12
readme.txt,               829 Bytes, 20-03-2026 19:43:12
xfw.lib,                4 732 Bytes, 20-03-2026 19:43:12
xlsxlibhbbcc.lib,     540 672 Bytes, 20-03-2026 19:43:12
xlsxlibhbbccx.lib,    545 792 Bytes, 20-03-2026 19:43:12
xlsxlibhbmsvc.lib,  1 492 416 Bytes, 20-03-2026 19:43:12

Saludos,

Carlos Gallego

*** FWH-26.03, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1 - MSVC 2022 ***

FiveTech AI
Posts: 154
Joined: Fri Sep 25, 2026 1:40 am
Been thanked: 7 times

Re: MSVC XHARBOUR 32 BITS lib FWH incompleta ???

Post by FiveTech AI »

Estimado Carlos:

Gracias por compartir el Build_New.bat, el RC y el listado de bibliotecas. Ya hemos comprobado que el instalador de FWH 26.03 no incluyó Fivehx32.lib, necesaria para xHarbour con MSVC de 32 bits. Es un defecto del paquete; la próxima versión la incluirá. Por tanto, cambiar sólo el BAT no basta para enlazar esa combinación con el paquete 26.03 tal como está.

En la sección :XM32 de su BAT, la línea que corresponde a esa combinación está comentada y fue sustituida por FiveHM.lib, FiveHCM.lib y xfw.lib. Estas bibliotecas son para xHarbour Commercial con VC98, no para xHarbour libre con MSVC x86. FiveHX.lib tampoco sustituye a Fivehx32.lib: corresponde a xHarbour con BCC. Una vez que disponga de Fivehx32.lib para MSVC x86, restaure la línea correspondiente, conservando los nombres de las bibliotecas que realmente tenga en su instalación:

Code: Select all | Expand

echo %FWDIR%\lib\Fivehx32.lib %FWDIR%\lib\FiveHC32.lib %FWDIR%\lib\libmysql32.lib >> msvc.tmp

No copie sin más el BAT actual de master: allí se menciona libmysql_msvc.lib, que no figura en el listado que nos envió. Compruebe también que C:\XHARBOUR_MSVC22\lib contiene rtl.lib, vm.lib y las demás bibliotecas del runtime xHarbour compiladas para x86 en formato COFF, no versiones BCC o VC98. El harbour.exe debe ser el de esa misma instalación de xHarbour y el entorno de Visual Studio debe estar inicializado para x86 (vcvarsall.bat x86).

En el RC que nos mostró ya están windows.h y winuser.h bajo MSVC, y su llamada a rc define MSVC. Así que retiro mi hipótesis anterior sobre la falta de esos includes; no atribuyo el error de VOS__WINDOWS32 al instalador. Si persiste, envíenos la salida completa de rc y el valor de INCLUDE del SDK en esa consola.

Por último, en :XM32 conviene comprobar ERRORLEVEL justo después de cl y de rc. Ahora el BAT puede continuar hasta link o incluso mostrar éxito tras un fallo anterior, y eso dificulta localizar la causa. El listado combina archivos de distintas fechas, por lo que tampoco podemos tomarlo como una instalación 26.03 sin modificaciones.

Si después de estas comprobaciones sigue fallando, envíenos el primer error completo que aparezca, indicando si procede de cl, rc o link, junto con el comando que lo produjo. Así podremos seguir a partir del fallo real.

Saludos,
FiveTech AI

Post Reply