Page 3 of 4

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 8:36 am
by Ale SB
Maestro ;

En Vc2005 y Vc2008 no se usa single-thread, agora debe usar solamente la LibcMt.Lib ( multi-threaded ).

La Libc.lib deve ser ignorada :

$(VCDIR)\bin\link @msvc.tmp /NODEFAULTLIB:LIBC.LIB /nologo /subsystem:windows /force:multiple >

http://msdn.microsoft.com/pt-br/library/6wtdswk0(VS.80).aspx

Saluds, Ale

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 10:29 am
by Antonio Linares
Ale,

Si, cierto, gracias :-)

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 12:29 pm
by Antonio Linares
Kleyber,

Una vez construyas Harbour con esta nueva version de VC, puedes construir aplicaciones con FWH usando las librerias de FWH existentes. Lo hemos probado y funciona bien :-)

Es decir, VC (2008) mantiene compatibilidad con VC98. Posiblemente la unica incompatibilidad sea con los modulos en C++ que se usan en FWH (ActiveX, GIFs).

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 12:41 pm
by Kleyber
Antonio Linares wrote:Kleyber,

Una vez construyas Harbour con esta nueva version de VC, puedes construir aplicaciones con FWH usando las librerias de FWH existentes. Lo hemos probado y funciona bien :-)

Es decir, VC (2008) mantiene compatibilidad con VC98. Posiblemente la unica incompatibilidad sea con los modulos en C++ que se usan en FWH (ActiveX, GIFs).


Entonces eso quiere decir que puedo usar con las libs de FWH 8.02 que uso? Y cuales son las clases que deberia cambiar para que no tenga incompatibilidad con el VC Express?

Saludos

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 12:48 pm
by Antonio Linares
Kleyber,

> Entonces eso quiere decir que puedo usar con las libs de FWH 8.02 que uso?

Si. FiveHM.lib y FiveHCM.lib

> Y cuales son las clases que deberia cambiar para que no tenga incompatibilidad con el VC Express?

En principio ninguna :-) Acabamos de probar los ActiveX y funcionan bien!

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 12:56 pm
by Kleyber
Gracias Antonio. Lo voy a probar ahora mismo.

Saludos,

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 12:59 pm
by Ale SB
Maestro,

Usted puede enviarme el make correcto que podremos usar con FWH+Hb_svn+WC2008 con los flags necesarios y un ejemplo de como generar una lib desde 1 prg y 1 fichero C?

Asi podremos regenerar nuestras clases personales !

Saluds, Ale

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Fri Feb 27, 2009 1:13 pm
by Antonio Linares
Ale,

Para hacer un checkout de Harbour nosotros hemos usado este bat:

checkout.bat
Code: Select all  Expand view

c:\"Program Files"\svn\bin\svn co https://harbour-project.svn.sourceforge.net/svnroot/harbour-project/trunk/harbour harbour
 

Usando este SVN que no requiere instalacion:
www.fivetechsoft.com/files/software/svn.zip

Luego para construir Harbour, hemos usado este fichero BAT que hemos copiado en donde esta make_vc.bat

makevc.bat
Code: Select all  Expand view

SET LIB=c:\vc2008\lib
SET INCLUDE=c:\vc2008\include
SET PATH=c:\vc2008\bin;%PATH%

SET HB_CC_NAME=vc
SET HB_ARCHITECTURE=w32
SET HB_GT_LIB=gtgui
SET HB_GT_DEFAULT=gui
SET HB_VISUALC_VER=60
SET HB_BUILD_MODE=c
SET C_USR= -DHARBOUR_MAIN_WIN -DHB_DYNLIB -DHB_FM_STATISTICS_OFF
SET HB_BUILD_DLL=no
SET HB_MAKE_PROGRAM=c:\vc2008\bin\nmake.exe

if A%1 == A GOTO :BUILD
make_vc %1

:BUILD
make_vc
 


Este mismo fichero BAT hay que copiarlo a la carpeta contrib y modificarlo para que llame a make_vc_all en vez de make_vc. Asi construye todas las librerias de contribuciones.

En un proximo mensaje explicamos como compilar un PRG, a C, a OBJ y reemplazarlo en una libreria.

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Sat Feb 28, 2009 8:32 am
by Antonio Linares
Asi se puede, despues de compilar un PRG, generar el OBJ y reemplazarlo en una libreria:

c:\VC2008\bin\cl -c -Ic:\harbour\include -Ic:\VC2008\include file.c
c:\VC2008\bin\Lib MyLib.lib /OUT:MyLib.lib file.obj

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Mon Mar 02, 2009 7:24 pm
by Kleyber
Antonio, muchas gracias por el aporte. Voy a testar aqui Harbour+MSVC+FWH y te comento los resultados.

Saludos,

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Wed Mar 04, 2009 6:46 pm
by Kleyber
Antonio,

Bueno, te comento mis resultados. He hecho este bat para la reconstrucción de la lib FIVEHM.LIB:

Code: Select all  Expand view

cls
if exist *.c   del *.c
if exist *.obj del *.obj
if exist *.prg del *.prg

copy \fwh802\source\classes\*.prg
copy \fwh802\source\function\*.prg
copy \fwh\source\function\*.c
copy \fwh802\source\winapi\*.prg
copy \fwh\source\winapi\*.c

if "%CC_DIR%"  == "" set CC_DIR=%ProgramFiles%\Microsoft Visual Studio 9.0\VC

pause
for %%f in (*.prg) do c:\harbour\bin\harbour %%f /n /ic:\fwh\include;c:\harbour\include
pause
for %%f in (*.c)   do "%CC_DIR%\bin\cl" -c -Ic:\harbour\include -I"%CC_DIR%\include" %%f
pause
for %%f in (*.obj) do "%CC_DIR%\bin\Lib" fivehm.lib /OUT:fivehm.lib %%f


Pero no he logrado generar la lib. He notado que durante la compilación, si existe algun erro en un prg o en un c el bat no se detiene y la compilacion continua hasta el final, mismo con los errores mostrados. Que hago mal?

Saludos,

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Wed Mar 04, 2009 7:09 pm
by Antonio Linares
Kleyber,

> Pero no he logrado generar la lib.

La libreria tiene que existir previamente. Tienes que crearla usando un fichero DEF:

lib.exe /def:mylib.def /out:mylib.lib

mylib.def es suficiente con que contenga esto
Code: Select all  Expand view

LIBRARY     MYLIB.LIB

EXPORTS
 


>
He notado que durante la compilación, si existe algun erro en un prg o en un c el bat no se detiene y la compilacion continua hasta el final, mismo con los errores mostrados.
>

habria que ver la forma de usar el errorlevel para detener un for dentro del BAT. Un error genera un errorlevel 1.

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Wed Mar 04, 2009 7:26 pm
by Kleyber
Si, verdad, pero no estoy mirando como poner esto. Y es cierto que existen alguns prgs que tienen errores... Desafortunadamente el FIVEHM.LIB y el FIVEHCM.LIB de la versión 8.02 no son compatibles con el VC Express que tengo aqui. Por esto necesito hacer la regeneración de la lib FIVEHM. Lo que hago?

Saludos,

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Wed Mar 04, 2009 9:06 pm
by Antonio Linares
Kleyber,

> no son compatibles con el VC Express

Por que ? Que errores te aparecen ? De enlazado ?

Re: Migración desde xHarbour+BCC a Harbour+MSVC

PostPosted: Wed Mar 04, 2009 10:50 pm
by Kleyber
Antonio

Antonio Linares wrote:Por que ? Que errores te aparecen ? De enlazado ?


Exactamente. Intenté compilar el BROWSE.PRG de la carpeta SAMPLES y el resultado es esto:

Code: Select all  Expand view

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ FiveWin for Harbour 8.02 (MSVC++) Fev. 2008      Harbour development power ³Ü
³ (c) FiveTech, 1993-2008     for Microsoft Windows 9X/NT/200X/ME/XP/Vista ³Û
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
Compiling...

..\include\FiveWin.ch(81) Warning W0001  Redefinition or duplicate definition of #define HB_SYMBOL_UNUSED
browse.c
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

Copyright (C) Microsoft Corporation.  All rights reserved.


FiveHCM.lib(CURSORS.obj) : warning LNK4006: _HB_FUN_CURSORNO already defined in FiveHM.lib(CONTROL.obj); second definition ignored
hbrtl.lib(tget.obj) : warning LNK4006: _HB_FUN_GETNEW already defined in FiveHM.lib(TCLIPGET.obj); second definition ignored
gtgui.lib(gtgui.obj) : warning LNK4006: _HB_FUN_HB_GT_GUI_DEFAULT already defined in FiveHM.lib(ERRSYSW.obj); second definition ignored
FiveHM.lib(HARBOUR.obj) : error LNK2001: unresolved external symbol _HB_FUN_HB_DBG_VMVARSLEN
FiveHM.lib(HARBOUR.obj) : error LNK2001: unresolved external symbol _HB_FUN_HB_DBG_VMVARLGET
FiveHM.lib(HARBOUR.obj) : error LNK2001: unresolved external symbol _HB_FUN_HB_DBG_VMPARLLIST
FiveHM.lib(HARBOUR.obj) : error LNK2001: unresolved external symbol _HB_FUN_HB_DBG_VMSTKLCOUNT
FiveHCM.lib(CURSORS.obj) : error LNK2019: unresolved external symbol _GetGuiResources referenced in function _HB_FUN_GETGUIRESOURCES
browse.exe : fatal error LNK1120: 5 unresolved externals
* Linking errors *
 


Y el BUILDHM.BAT que tengo es este:

Code: Select all  Expand view

@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for Harbour 8.02 (MSVC++) Fev. 2008      Harbour development power ³Ü
ECHO ³ (c) FiveTech, 1993-2008     for Microsoft Windows 9X/NT/200X/ME/XP/Vista ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

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

REM ***
REM *** Adaptado para uso do FWH & MSVC Express 2008 por Vailton Renato
REM ***
call "%ProgramFiles%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86

if "%CC_DIR%"  == "" set CC_DIR=%ProgramFiles%\Microsoft Visual Studio 9.0\VC
if "%SDK_DIR%" == "" set SDK_DIR=%ProgramFiles%\Microsoft SDKs\Windows\v6.0A
if "%HBDIR%"   == "" set HBDIR=c:\harbour

ECHO Compiling...

if exist %HBDIR%\bin\harbour.exe    set hdir=%HBDIR%\bin
if exist %HBDIR%\bin\vc\harbour.exe set hdir=%HBDIR%\bin\vc

if exist %HBDIR%\lib\hbvm.lib       set hdirl=%HBDIR%\lib
if exist %HBDIR%\lib\vc\hbvm.lib    set hdirl=%HBDIR%\lib\vc

set include=%CC_DIR%\include;%HBDIR%\include;%include%
set lib=%CC_DIR%\lib;%SDK_DIR%\lib;%hdir%\lib;%lib%

"%hdir%\harbour" %1 /n /i..\include;%HBDIR%\include /w /p %2 %3 > comp.log
IF ERRORLEVEL 1 GOTO COMPILEERROR
type comp.log

"%CC_DIR%\bin\cl" -TP -W3 -c /GA %1.c
:ENDCOMPILE

IF EXIST %1.rc "%SDK_DIR%\bin\rc" -r -d__FLAT__ %1

echo %1.obj  > msvc.tmp
echo ..\lib\FiveHM.lib ..\lib\FiveHCM.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

rem Uncomment these two lines to use Advantage RDD
rem echo "%hdirl%\rddads.lib" >> msvc.tmp
rem echo "%hdirl%\ace32.lib" >> msvc.tmp

echo "%CC_DIR%\lib\libcmt.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\kernel32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\user32.lib"    >> msvc.tmp
echo "%SDK_DIR%\lib\gdi32.lib"     >> msvc.tmp
echo "%SDK_DIR%\lib\winspool.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\comctl32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\comdlg32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\advapi32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\shell32.lib"   >> msvc.tmp
echo "%SDK_DIR%\lib\ole32.lib"     >> msvc.tmp
echo "%SDK_DIR%\lib\oleaut32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\uuid.lib"      >> msvc.tmp
echo "%SDK_DIR%\lib\odbc32.lib"    >> msvc.tmp
echo "%SDK_DIR%\lib\odbccp32.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\iphlpapi.lib"  >> msvc.tmp
echo "%SDK_DIR%\lib\mpr.lib"       >> msvc.tmp
echo "%SDK_DIR%\lib\version.lib"   >> msvc.tmp
echo "%SDK_DIR%\lib\wsock32.lib"   >> msvc.tmp
echo "%SDK_DIR%\lib\msimg32.lib"   >> msvc.tmp

IF EXIST "%1.res" echo "%1.res" >> msvc.tmp

"%CC_DIR%\bin\link" @msvc.tmp /NODEFAULTLIB:LIBC.LIB /nologo /subsystem:windows /force:multiple /NODEFAULTLIB:libcmt

IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
%1
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c
@del msvc.tmp

: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


Que hago ahora?

Saludos,