Hola Joao
Yo compilo perfectamente en 32 y 64 bits uso el MSVC 2022 Community con la ultima version de Harbour y y la de Fivewin es vers. 24.09 pero tambien estoy probando la beta 26.03 todo esto con hbmk2 con ficheros hbp , claro tambien tengo un build.bat personalizado que si quiero compilar en 64 bits no pongo nada pero si quiero que genere 32 bits. utilizo:
build ficherow 32 // Siendo ficherow el archivo .hbp (no es necesario poner la extension pero si la pones no pasa nada.)
build ficherow // Seria simplemente para 64 bits (Por defecto)
y con esto genero exes para 64 de la forma ficherow64.exe y ficherow.exe (siendo fichero el archivo .hbp)
lo de añadir una w al final del nombre es una mania mia, simplemente significa (windows) :lol:
// Build.bat
@echo on
cls
REM -------------------------
REM Validar parámetros
REM -------------------------
IF "%~1"=="" (
echo Uso: build nombre_proyecto [32^|64]
goto :eof
)
set NAME=%~n1
set ARCH=%~2
REM Por defecto 64 bits
IF "%ARCH%"=="" set ARCH=64
REM Validar arquitectura
IF /I NOT "%ARCH%"=="32" IF /I NOT "%ARCH%"=="64" (
echo Arquitectura inválida. Usa 32 o 64
goto :eof
)
REM -------------------------
REM Configuración según arch
REM -------------------------
IF "%ARCH%"=="64" (
set HB_PATH=c:\harbour\bin\win\msvc64\hbmk2
set COMP=msvc64
set EXE_NAME=%NAME%64
set VCVARS=vcvars64.bat
) ELSE (
set HB_PATH=c:\harbour\bin\win\msvc\hbmk2
set COMP=msvc
set EXE_NAME=%NAME%
set VCVARS=vcvars32.bat
)
REM -------------------------
REM Archivo .hbp
REM -------------------------
set FILE=%~1
IF /I NOT "%~x1"==".hbp" (
set FILE=%~1.hbp
)
cd /d "%~dp1" 2>nul
REM Borrar exe previo
IF exist "%EXE_NAME%.exe" del "%EXE_NAME%.exe"
@setlocal
REM -------------------------
REM Entorno Visual Studio
REM -------------------------
IF "%VS170COMNTOOLS%" == "" (
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\%VCVARS%"
)
REM -------------------------
REM Compilar
REM -------------------------
"%HB_PATH%" "%FILE%" -comp=%COMP%
@endlocal
REM Ejecutar si existe
IF exist "%EXE_NAME%.exe" (
"%EXE_NAME%.exe"
) ELSE (
echo Error: no se genero el ejecutable.
)
// ejemplo simple de hbp
# $Id: ficherow.hbp $
#flags
-gui
-inc
-ldflag=/NODEFAULTLIB:msvcrt
-ldflag+=/NODEFAULTLIB:libucrt
#-b
{msvc}-workdir=.\obj
{msvc64}-workdir=.\obj64
#INCLUDES#PRG
# ------ MODULO PRINCIPAL -------
.\source\ficherow.prg
# ------ SOURCES -----------------
.\source\prg1.prg
.\source\prg2.prg
.\source\prg3.prg
.\source\prg4.prg
.\source\prg5.prg
#.\source\etc......
{msvc64}-Ic:\fwh64\include
{msvc}-Ic:\fwh\include
#LIBRERIAS FW
{msvc64}-Lc:\fwh64\lib
{msvc64}-lFiveH64
{msvc64}-lFiveHC64
#{msvc64}-llibmariadb64
{msvc}-Lc:\fwh\lib
{msvc}-lFiveH32
{msvc}-lFiveHC32
#{msvc}-llibmariadb
#LIBRERIAS DE TERCEROS
#{msvc64}-Lc:\fwh_proyectos\Jvchwin\lib64
#{msvc64}-ljvchwin64
#{msvc}-Lc:\fwh_proyectos\Jvchwin\lib
#{msvc}-ljvchwin
-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme
#LIBRERIAS HARBOUR (se añaden las cabeceras .hbc)
xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbhpdf.hbc
hbcomm.hbc
hbmxml.hbc
#RC
.\resource\*.rc
#NOMBRE DEL FICHERO EXE DE SALIDA:
{msvc64}-oFicherow64
{msvc}-oFicherow
Como puedes comprobar yo utilizo las rutas standard de Harbour y de Fivewin e incluso añado libs propias, esta comentado, solo que sirva
de ejemplo.
Mis subdirectorios en todos los proyectos son
Obj
Obj64
source
resource
automaticamente compile para 32 van los .c y .obj al Obj y si compilo para 64 al Obj64 :-)
en source tengo todos los fuentes.
Y en resource el fichero .rc con el resource.h
tambien tengo una carpeta fija en la raiz del disco C:\Resource y aqui es donde tengo todos los bitmaps , cur, ico que utilizo en todos los proyectos.
cada archivo .rc lee de ahi o sea un repositorio para todos los proyectos (Lo tengo guardado en Google Drive y en Disco duro externo :-)) )
El problema que tengo que al añadir al .rc
#ifdef __FLAT__
1 24 "..\\..\\fwh64\\Samples\\WinXp\\WindowsXP.Manifest"
#endif
#ifdef __64__
1 24 "..\\..\\fwh64\\Samples\\WinXp\\WindowsXP.Manifest64"
#endif
Como se puede comprobar la ruta de los manifest es correcta ya que yo estoy en dos subdirectorios por arriba de la raiz de c:\
y es la forma que usa Pelles C para referirse a los archivos con \\
Solo compila bien en 32 bits en 64 bits tengo que utilizar solo esto.
1 24 "WinXP/WindowsXP.Manifest64"
Y funciona perfectmante por supuesto pero necesito dos archivos .rc , no hay problema pero creo que si existe un condicional deberia funcionar bien, a vosotros os funciona bien ?, como lo haceis por favor ?
Saludos
Perdon por la extension del mensaje ya se que todos teneis clarisimo lo de la compilacion, pero es por despejar dudas.
Jose