Hola José,
Como puedes ver por varios hilos que he arrancado en el último mes estamos intentando pasar también a 64 bits.
Primero fue pasar de xHarbour a Harbour en 32 bits.
Después estamos intentando conseguir construir las aplicaciones en 64 bits.
Hay que hacer algunos cambios, sobre todo, si las versiones de de FW y xHarbour eran antigüas como era nuestro caso.
Ya hemos conseguido el paso a Harbour 32 bits, que con la ayuda de Antonio y otros del foro, ha sido muy rápida.
En cuanto a la construcción para 64 bits aun quedan algunas cuestiones que estamos intentando resolver, pues de las dos aplicaciones más grandes en una no ha habido problemas (a falta de probar en detalle la aplicación en producción) y de la otra no conseguimos que al salir de la aplicación en 64 bits no se quede colgada. Pero si no fuera por esto está prácticamente terminado el proceso.
Para la construcción en 64 bits estamos usando el W7 con el SP1 instalado; si no lo tienes no te deja instalar el vs_community 2013.
Luego, usamos el batch que trae en samples FWH. Con algunas modificaciones específicas que
necesitamos nostros para unas rutinas en C para inet que tuvimos que desarrollar en su momento. En concreto para el uso de las librerías wininet.lib y ws2_32.lib y otra para comunicaciones RS232 la hbcomm.lib.
VSC 2013 te va a lanzar un montón de warnings si usas código con funciones standard de C. Esto lo puedes eliminar agragando a tu prg lo siguiente:
- Code: Select all Expand view
//Elimina los Warning por el uso de funciones WinSock en código C cuando se usa el compilador
// de Microsoft Visual Studio Comunity 2013.
// Versión 1.0 de 05/01/2015
#define _WINSOCK_DEPRECATED_NO_WARNINGS
//Elimina los Warning por el uso de funciones standard de C cuando se usa el compilador
// de Microsoft Visual Studio Comunity 2013.
// Versión 1.0 de 05/01/2015
#pragma warning(disable: 4996)
O, como recomienda Antonio, usando funciones equivalentes a esas standard de C propias de harbour. Pero creo que si no te han fallado las que venías usando en C, salvo mejor opinión, puedes seguir usando las standard de C, al menos hasta que hayas conseguido montar la aplicación en 64 bits. Luego ya podremos ir perfeccionando, salvo que lo quieras hacer todo a la vez.
Y ahora el enrevesado procedimiento para pasar los recursos de los .RC generados con el WorkShop 4.5 de Borland de forma que se puedan usar con el compilador de VSC2013 tuvimos primero que importarlos con el Pelles C. Grabar el .RC que además genera unos ficheritos por cada imagen e icono, Renombrar esos ficheros a nuestro gusto. Modificar a mano en el .RC creado por Pelles C para que se ajusten las referencias a esos nombres de ficheros a nuestro gusto. Abrir ahora el .RC con VSC2013 y darle a grabar. Ojo con los manifest porque los tendrás que cambiar a mano en el VSC2013, copio código para que te pueda servir el mismo RC para 32 y 64 bits:
- Code: Select all Expand view
#ifdef __64__
1 24 "C:\\fwh64\\samples\\winxp\\WindowsXP.Manifest64"
#else
//1 MANIFEST "C:\\CLIWIN\\FW\\winxp.man"
1 MANIFEST "C:\\fwh64\\samples\\winxp\\WindowsXP.Manifest"
#endif
Ahora te copio en batch que utilizamos que te puede servir con tus adaptaciones específicas:
- Code: Select all Expand view
@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FWH 64 for Harbour 14.07 (MSVC++) Jul.2014 Harbour development power ³Ü
ECHO ³ (c) FiveTech, 1993-2014 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8 ³Û
ECHO ³ ³Û
ECHO ³ Modificación Verhoven 08/01/2015 ³Û
ECHO ³ Visual Studio Comunity 2013 para 64 Bits ³Û
ECHO ³ Incluye llamada al Browse de Hernan compilado también para 64 Bits. ³Û
ECHO ³ ³Û
ECHO ³ Carpetas de la instalación para que funcione este bat: ³Û
ECHO ³ FWH 64: C:\FWH64 ³Û
ECHO ³ Harbour 64: C:\harbour ³Û
ECHO ³ VSC 2013: En la que instala por defecto ³Û
ECHO ³ ³Û
ECHO ³ Ejemplo de llamada al bat: build64 miprog ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST
@set oldpath=%path%
@set oldinclude=%include%
@set oldlib=%lib%
@set oldlibpath=%libpath%
if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles%\Microsoft
Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" call "%ProgramFiles
(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64
rem if "%FWDIR%" == "" set FWDIR=.\..
if "%FWDIR%" == "" set FWDIR=C:\FWH64
if "%HBDIR%" == "" set HBDIR=c:\harbour
ECHO Compiling...
set hdir=%HBDIR%
rem set hdirl=%hdir%\lib\vc64
set hdirl=%hdir%\lib
%hdir%\bin\harbour %1 /n /i%fwdir%\include;%hdir%\include /p /d__64__ %2 %3 > comp.log 2> warnings.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
@type comp.log
@type warnings.log
cl -TC -W3 -O2 -c -I%hdir%\include %1.c
:ENDCOMPILE
IF EXIST %1.rc rc -r -D__64__ %1
echo %1.obj > msvc.tmp
rem TBROWSE DE HERNAN:
rem Hay que poner delante las que sustituyen a las de FW, o mejor dicho
rem el enlazador pone en el exe las que primero encuentra !
echo C:\CLIWIN\TBROWSE17b\LIB\TWBRWX64_H.lib >> msvc.tmp
echo %fwdir%\lib\FiveH64.lib %fwdir%\lib\FiveHC64.lib >> msvc.tmp
echo %hdirl%\hbrtl.lib >> msvc.tmp
echo %hdirl%\hbvm.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 %hdir%\lib\hbcomm.lib >> msvc.tmp
rem Uncomment these two lines to use Advantage RDD
rem echo %hdirl%\rddads.lib >> msvc.tmp
rem echo %hdirl%\ace32.lib >> msvc.tmp
echo kernel32.lib >> msvc.tmp
echo user32.lib >> msvc.tmp
echo gdi32.lib >> msvc.tmp
echo winspool.lib >> msvc.tmp
echo comctl32.lib >> msvc.tmp
echo comdlg32.lib >> msvc.tmp
echo advapi32.lib >> msvc.tmp
echo shell32.lib >> msvc.tmp
echo ole32.lib >> msvc.tmp
echo oleaut32.lib >> msvc.tmp
echo uuid.lib >> msvc.tmp
echo odbc32.lib >> msvc.tmp
echo odbccp32.lib >> msvc.tmp
echo iphlpapi.lib >> msvc.tmp
echo mpr.lib >> msvc.tmp
echo version.lib >> msvc.tmp
echo wsock32.lib >> msvc.tmp
echo msimg32.lib >> msvc.tmp
echo oledlg.lib >> msvc.tmp
echo psapi.lib >> msvc.tmp
echo gdiplus.lib >> msvc.tmp
echo winmm.lib >> msvc.tmp
echo wininet.lib >> msvc.tmp
echo ws2_32.lib >> msvc.tmp
rem echo %ProgramFiles%(x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64\wininet.lib >> msvc.tmp
rem echo %ProgramFiles%(x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64\ws2_32.lib >> msvc.tmp
IF EXIST %1.res echo %1.res >> msvc.tmp
rem link @msvc.tmp /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libc
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
@set path=%oldpath%
@set include=%oldinclude%
@set lib=%oldlib%
@set libpath=%oldlibpath%
@set oldpath=""
@set oldinclude=""
@set oldlib=
@set oldlibpath=
rem delete temporary files
@del %1.c
@del %1.obj
@del %1.ppo
@del msvc.tmp
@del comp.log
@del warnings.log
%1
GOTO EXIT
ECHO
:COMPILEERROR
@type comp.log
ECHO * Compiling errors *
GOTO EXIT
:LINKERROR
ECHO * Linking errors *
GOTO EXIT
:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi¢n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT
:NOEXIST
ECHO The specified PRG %1 does not exist
:EXIT
Saludos.