FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC donde se encuentra GetProcAddress()
Posts: 94
Joined: Fri Aug 10, 2007 01:47 AM
donde se encuentra GetProcAddress()
Posted: Thu Feb 19, 2009 02:03 AM

Tengo un error de linkeo UNRESOLVED EXTERNAL GetProcAddress

la linea de codigo que genera el error es:

lpZipCreateFile = (ZipCreateFilePtr *)GetProcAddress(zipDll, ZIPCREATEFILENAME);

(A proposito se trata de probar LiteZip.dll que me sugiere JL Capel en mi post anterior)

ESTOY UTILIZANDO EL BUILD DE AUGOST 2007, poruqe hasta hoy no me ha dado ningun problema, mi g2.bat ha sido el mismo que he usado desde el principio.

Saludos.

INCLUYO PARTE DEL SOURCE:

pragma BEGINDUMP

include <windows.h>

include <tchar.h>

// Include LiteZip.h for creating a ZIP archive

include "LiteZip.h"

// Where we store the pointers to LiteZip.dll's functions that we call
ZipCreateFilePtr lpZipCreateFile;
ZipAddFilePtr
lpZipAddFile;
ZipClosePtr lpZipClose;
ZipFormatMessagePtr
lpZipFormatMessage;

HB_FUNC( CREAZIP )

{

LPWSTR sZipfile = AnsiToWide( hb_parc( 1 ) );
HMODULE     zipDll;
HZIP        hz;
DWORD       result;

// Open the LiteZip.DLL. Note: If LiteZip.dll is not placed in a path that can be found
// by this app, then LoadLibrary will fail. So, either copy LiteZip.dll to the same
// directory as this EXE, or to some directory that Windows is set to search.
if ((zipDll = (HMODULE)LoadLibrary(_T(&quot;LiteZip.dll&quot;))))
{
    // Get the addresses of 4 functions in LiteZip.dll -- ZipCreateFile(), ZipAddFile()
    // ZipClose(), and ZipFormatMessage.
    lpZipCreateFile = (ZipCreateFilePtr *)GetProcAddress(zipDll, ZIPCREATEFILENAME);
    lpZipAddFile = (ZipAddFilePtr *)GetProcAddress(zipDll, ZIPADDFILENAME);
    lpZipClose = (ZipClosePtr *)GetProcAddress(zipDll, ZIPCLOSENAME);
    lpZipFormatMessage = (ZipFormatMessagePtr *)GetProcAddress(zipDll, ZIPFORMATMESSAGENAME);
    // Create a ZIP archive on disk named as sZipfile
    if (!(result = lpZipCreateFile(&amp;hz, sZipfile, 0)))
    {
Arturo LS
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: donde se encuentra GetProcAddress()
Posted: Thu Feb 19, 2009 09:27 AM

Arturo,

Tienes que usar GetProcAddressW( HMODULE hModule, WCHAR * cProcName ); que es para unicode.

Ojo que cProcName tiene que ser proporcionado en unicode, por lo que tienes que llamar a estas funciones:

WCHAR * AnsiToWide( char * );

...

WCHAR * pW = AnsiToWide( "nombre_funcion" );

usas pW

y liberas su memoria despues de usarlo:

hb_xfree( ( void * ) pW );

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 94
Joined: Fri Aug 10, 2007 01:47 AM
Re: donde se encuentra GetProcAddress()
Posted: Thu Feb 19, 2009 03:12 PM

Gracias, ya estoy intentando con GetProcAddressW() en lugar de GetProcAddress(), aun no lo logro porque se casi nada de C y menos de tipos de variable, pero por lo pronto GetProcAddressW() igual me marca "undefined assuming external..." pienso que me falta alguna libreria ???

Arturo LS
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: donde se encuentra GetProcAddress()
Posted: Thu Feb 19, 2009 06:57 PM

Arturo,

La función GetProcAddressW() es proporcionada por coredll.lib, que es una librería de importación del propio coredll.dll de Windows Mobile.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: donde se encuentra GetProcAddress()
Posted: Thu Feb 19, 2009 07:06 PM
Arturo,

Aqui tienes un pequeño ejemplo que usa LoadLibrary() y GetProcAddressW() y que aqui compila y genera el EXE bien:

test.prg
Code (fw): Select all Collapse
#include "FWCE.ch"

function Main()

   MsgInfo( Test() )

return nil

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

HMODULE GetProcAddressW( HMODULE, WCHAR * );

HB_FUNC( TEST )
{
   HMODULE hModule = LoadLibrary( L"coredll.dll" );

   hb_retnl( ( LONG ) GetProcAddressW( hModule, L"MessageBoxW" ) );

   FreeLibrary( hModule );
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 94
Joined: Fri Aug 10, 2007 01:47 AM
Re: donde se encuentra GetProcAddress()
Posted: Fri Feb 20, 2009 12:25 PM

Gracias, con lo que me mandaste pude comprobar que la dll que estoy intentando no puede cargarse, probablemente porque la lib no esta para ARM. Ahora, si entendi bien lo leido aqui en los foros, si yo tengo LiteZip.dll y LiteZip.lib, necesito lo siguiente:

Para obtener LiteZip.def:
impdef.exe LiteZip.def LiteZip.dll
Y luego obtendria un nuebo LiteZip.lib con esto:
c:\vce\bin\lib /def:LiteZip.def /machine:ARM

Mi problema es que bajo c:\vce\bin unicamente tengo lib.exe, pero no tengo impdef.exe

-Estoy bien?
-Como obtengo impdef.exe?
- me hara falta algo mas?

Saludos.

Arturo LS
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: donde se encuentra GetProcAddress()
Posted: Fri Feb 20, 2009 12:58 PM

Arturo,

Es correcto lo que comentas :-)

Aqui tienes impdef.exe:

http://www.mediafire.com/?sharekey=414c ... eaa7bc68bc

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion