I don´t know if I am doing something wrong or hb_dynaCall is not working.
Here is an example of what I am doing and it return NIL as result.
STATIC s_hDLL := { => }
STATIC s_mutex := hb_mutexCreate()
#define DC_CALL_STD 0x0020
#define MAX_PATH 260
Procedure Main(...)
LOCAL cVolumeName := Replicate( CHR(0), MAX_PATH+1 )
LOCAL nNameSize := Len( cVolumeName )
LOCAL nResult, cSerial, cVolume := "C:"
cSerial := U2Bin(0)
nResult := ; // * C prototype *
CallDLL32( "GetVolumeInformation", "Kernel32.dll", ;
cVolume , ; // LPCTSTR lpRootPathName ,
@cVolumeName , ; // LPTSTR lpVolumeNameBuffer ,
nNameSize , ; // DWORD nVolumeNameSize ,
@cSerial , ; // LPDWORD lpVolumeSerialNumber ,
0 , ; // LPDWORD lpMaximumComponentLength ,
0 , ; // LPDWORD lpFileSystemFlags ,
0 , ; // LPTSTR lpFileSystemNameBuffer ,
0 ) // DWORD nFileSystemNameSize )
// format serial number as FFFF:FFFF
cSerial := NumToHex( Bin2U(cSerial), 8 )
cSerial := Stuff( cSerial, 5, 0, ":" )
? hb_ValToStr(nResult)
? Left( cVolumeName, At( Chr(0), cVolumeName ) - 1 )
UnloadAllDll()
RETURN
#include "
hbdyn.ch"
PROCEDURE UnloadAllDll()
hb_mutexLock( s_mutex )
s_hDLL := { => }
hb_mutexUnlock( s_mutex )
RETURN
FUNCTION CallDll32( cFunction, cLibrary, ... )
RETURN hb_DynaCall1( cFunction, cLibrary, NIL, ... )
#define __PLATFORM__WINDOWS
#if define( __PLATFORM__WINDOWS )
/* Use Windows system .dll calling convention on Windows systems,
like in original lib. Original .lib was a Windows-only solution.
[vszakats] */
#define _DEF_CALLCONV_ HB_DYN_CALLCONV_STDCALL
#else
#define _DEF_CALLCONV_ HB_DYN_CALLCONV_CDECL
#endif
FUNCTION hb_DynaCall1( cFunction, cLibrary, nCount, ... )
LOCAL aParams
LOCAL hHandle
IF HB_ISSTRING( cFunction ) .AND. ;
HB_ISSTRING( cLibrary )
hb_mutexLock( s_mutex )
IF ! cLibrary $ s_hDLL
s_hDLL[ cLibrary ] := hb_libLoad( cLibrary )
ENDIF
hHandle := s_hDLL[ cLibrary ]
hb_mutexUnlock( s_mutex )
IF HB_ISNUMERIC( nCount ) .AND. nCount >= 0 .AND. nCount < PCount() - 3
aParams := ASize( hb_AParams(), nCount )
RETURN hb_DynCall( { cFunction, hHandle, HB_DYN_CALLCONV_STDCALL }, hb_ArrayToParams( aParams ) )
ELSE
RETURN hb_DynCall( { cFunction, hHandle, HB_DYN_CALLCONV_STDCALL }, ... )
ENDIF
ENDIF
RETURN NIL
FUNCTION StrPtr( x )
RETURN x
FUNCTION PtrStr( x )
RETURN x