Error al cargar PCode DLL
Error al cargar PCode DLL
Saludos amigos del foro.
Cambie de versión de FWH1302 + xHarbour 121 6717 + Bcc58 a FWH1606 + xHarbour 1.2.3 (B.20170513) + Bcc73
Compile todo Ok.
Al ejecutarse el programa me sale el siguiente error: _hb_vmProcessSysDllSymbols
y es en la instrucción: LibLoad( cPathDLL+ "Mnto.dll" )
Probé también con los ejemplos: testdllp.prg y pcodedll y sale el mismo error.
De antemano, cualquier ayuda sera bienvenida.
Saludos cordiales.
Rolando
Cochabamba, Bolivia
Cambie de versión de FWH1302 + xHarbour 121 6717 + Bcc58 a FWH1606 + xHarbour 1.2.3 (B.20170513) + Bcc73
Compile todo Ok.
Al ejecutarse el programa me sale el siguiente error: _hb_vmProcessSysDllSymbols
y es en la instrucción: LibLoad( cPathDLL+ "Mnto.dll" )
Probé también con los ejemplos: testdllp.prg y pcodedll y sale el mismo error.
De antemano, cualquier ayuda sera bienvenida.
Saludos cordiales.
Rolando
Cochabamba, Bolivia
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Error al cargar PCode DLL
Rolando,
> Al ejecutarse el programa me sale el siguiente error: _hb_vmProcessSysDllSymbols
> y es en la instrucción: LibLoad( cPathDLL+ "Mnto.dll" )
Por favor copia aquí el error completo exactamente como te aparece.
Si puedes hacer una captura de pantalla, aún mejor.
> Al ejecutarse el programa me sale el siguiente error: _hb_vmProcessSysDllSymbols
> y es en la instrucción: LibLoad( cPathDLL+ "Mnto.dll" )
Por favor copia aquí el error completo exactamente como te aparece.
Si puedes hacer una captura de pantalla, aún mejor.
Re: Error al cargar PCode DLL
Antonio,
Gracias por responder.
El siguiente error aparece cuando utilizo pcodedll.dll que viene con FWH.
la segunda pantalla indica que el programa continua ejecutándose (no termina).
El siguiente error aparece cuando utilizo pcodedll.dll recompilado (con maindllp.obj tb recompilado).
En este caso el programa termina después de mostrar el mensaje.
Gracias por responder.
El siguiente error aparece cuando utilizo pcodedll.dll que viene con FWH.
la segunda pantalla indica que el programa continua ejecutándose (no termina).
El siguiente error aparece cuando utilizo pcodedll.dll recompilado (con maindllp.obj tb recompilado).
En este caso el programa termina después de mostrar el mensaje.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Error al cargar PCode DLL
Después de cambiar de versión de xHarbour, has reconstruido nuevamente la DLL ?
Es necesario que lo hagas
Es necesario que lo hagas
Re: Error al cargar PCode DLL
Si, claro que si.
Primero reconstruí maindllp.obj y después la misma DLL que enlaza a maindllp.obj.
El problema creo que esta en maindllp.c que es donde esta la referencia a esta función.
Sin embargo en ningún momento de la compilación y "link" me dice que falta eta función.
Este es el codigo donde se hace referencia a esa funcion:
Primero reconstruí maindllp.obj y después la misma DLL que enlaza a maindllp.obj.
El problema creo que esta en maindllp.c que es donde esta la referencia a esta función.
Sin embargo en ningún momento de la compilación y "link" me dice que falta eta función.
Este es el codigo donde se hace referencia a esa funcion:
Code: Select all
/* module symbols initialization */
PSYMBOLS hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiModuleSymbols, const char * szModule, int iPCodeVer, PHB_ITEM * pGlobals ) /* module symbols initialization */
{
/* notice hb_vmProcessSysDllSymbols() must be used, and not
* hb_vmProcessSymbols(), as some special symbols pointers
* adjustments are required
*/
#if defined( __cplusplus )
static VM_PROCESS_DLL_SYMBOLS
#else
static VM_PROCESS_DLL_SYMBOLS pProcessSymbols = NULL;
if( ! pProcessSymbols )
#endif
pProcessSymbols = ( VM_PROCESS_DLL_SYMBOLS ) hb_GetProcAddress( "_hb_vmProcessSysDllSymbols" );
HB_SYMBOL_UNUSED( pGlobals );
return pProcessSymbols( pSymbols, uiModuleSymbols, szModule, iPCodeVer, pGlobals );
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Error al cargar PCode DLL
Prueba a añadir este código al PRG principal de tu aplicación:
Code: Select all
#pragma BEGINDUMP
#include "hbapi.h"
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
{
return hb_vmProcAddress( szFuncName );
}
#pragma ENDDUMP
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Error al cargar PCode DLL
Y en samples/buildhdp.bat tienes que modificar:
echo %hdir%\lib\maindllp.obj + >> b32.bc
así:
echo %hdir%\lib\hbmaindllp.lib + >> b32.bc
echo %hdir%\lib\maindllp.obj + >> b32.bc
así:
echo %hdir%\lib\hbmaindllp.lib + >> b32.bc
Re: Error al cargar PCode DLL
No funciona, continua el problema.
Estoy trabajando con los ejemplos: testdllp.prg y pcodedll.prg
a testdllp.prg le añadí el código que me indicas y el resultado de la compilación es el siguiente:
Por si acaso, cambie:
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
por
HB_EXPORT PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
El problema es con xHarbour.
En Harbour existe la libreria: hbmaindllp.lib, en xHarbour NO. Así que sigo usando maindllp.obj compilado por mi.
Al parecer _hb_vmProcAddress esta en la libreria hbvm.lib, que xHarbour no la tiene en la ultima version.
mmm... encontre hbvm.lib en un instalador de xHarbour antiguo con Bcc58
Donde consigo hbvm.lib para xharbour 1.2.3
Antonio, gracias por responder, disculpa la molestia.
Estoy trabajando con los ejemplos: testdllp.prg y pcodedll.prg
a testdllp.prg le añadí el código que me indicas y el resultado de la compilación es el siguiente:
no logra enlazar _hb_vmProcAddressCompiling...
xHarbour 1.2.3 Intl. (SimpLex) (Build 20170513)
Copyright 1999-2017, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'testdllp.prg' and generating preprocessed output to 'testdllp.ppo'...
Generating C source output to 'testdllp.c'...
Done.
Lines 28, Functions/Procedures 1, pCodes 42
Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
testdllp.c:
Warning W8065 testdllp.prg 35: Call to function 'hb_vmProcAddress' with no prototype in function dll_hb_vmProcAddress
Warning W8069 testdllp.prg 35: Nonportable pointer conversion in function dll_hb_vmProcAddress
Turbo Incremental Link 6.80 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
Error: Unresolved external '_hb_vmProcAddress' referenced from D:\FWH1606\SAMPLES\TESTDLLP.OBJ
Error: Unable to perform link* Linking errors *
Por si acaso, cambie:
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
por
HB_EXPORT PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
El problema es con xHarbour.
En Harbour existe la libreria: hbmaindllp.lib, en xHarbour NO. Así que sigo usando maindllp.obj compilado por mi.
Al parecer _hb_vmProcAddress esta en la libreria hbvm.lib, que xHarbour no la tiene en la ultima version.
mmm... encontre hbvm.lib en un instalador de xHarbour antiguo con Bcc58
Donde consigo hbvm.lib para xharbour 1.2.3
Antonio, gracias por responder, disculpa la molestia.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Error al cargar PCode DLL
Localiza el código fuente de hb_vmProcAddress e impleméntalo en xHarbour
Re: Error al cargar PCode DLL (Solucionado)
Bueno, el problema es que no estaba enlazado _hb_vmProcessSysDllSymbols, como muestra el mensaje de error.
Para que el ejemplo funcione (testdllp.prg) se tiene que modificar Buildx.bat
Añadir el DEFFILE, para que quede algo asi: (la ultima linea del siguiente codigo)
Y mas abajo: (la ultima linea del siguiente codigo)
con esto logre hacer funcionar testdllp
Espero que le sirva a alguien.
Saludos.
Rolando
Cochabamba, Bolivia.
Para que el ejemplo funcione (testdllp.prg) se tiene que modificar Buildx.bat
Añadir el DEFFILE, para que quede algo asi: (la ultima linea del siguiente codigo)
Code: Select all
:
set hdir=%XHDIR%
set hdirl=%hdir%\lib
set bcdir=d:\borland\bcc73
set fwh=%FWDIR%
SET DEFFILE=%XHDIR%\source\vm\BCC.DEF
Code: Select all
:
echo %bcdir%\lib\psdk\iphlpapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\shell32.lib, + >> b32.bc
echo %DEFFILE% >> b32.bc
Espero que le sirva a alguien.
Saludos.
Rolando
Cochabamba, Bolivia.