2008-06-10 18:50 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* contrib/hbw32/dllcall.c
! Fixed to not execute code after hb_errRT*() calls.
! Fixed to call hb_gcFree() if the hb_gcAlloc()ed
pointer is not hb_retptrGC()d (in case of errors).
This commit is contained in:
@@ -8,6 +8,12 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-06-10 18:50 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbw32/dllcall.c
|
||||
! Fixed to not execute code after hb_errRT*() calls.
|
||||
! Fixed to call hb_gcFree() if the hb_gcAlloc()ed
|
||||
pointer is not hb_retptrGC()d (in case of errors).
|
||||
|
||||
2008-06-10 19:10 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
|
||||
* harbour/source/vm/hashfunc.c
|
||||
* extended functionality of HB_HSet(), HB_HDel() and HB_HDelAt()
|
||||
|
||||
@@ -749,26 +749,32 @@ HB_FUNC( DLLPREPARECALL )
|
||||
}
|
||||
else if( ISNUM( 3 ) )
|
||||
xec->wOrdinal = hb_parni( 3 );
|
||||
|
||||
xec->dwType = EXEC_DLL;
|
||||
xec->lpFunc = ( LPVOID ) GetProcAddress( xec->hDLL, xec->cProc ? ( LPCSTR ) xec->cProc : ( LPCSTR ) xec->wOrdinal );
|
||||
|
||||
if( xec->lpFunc == NULL && xec->cProc )
|
||||
{
|
||||
/* try ANSI flavour ? */
|
||||
xec->cProc[ hb_parclen( 3 ) ] = 'A';
|
||||
xec->cProc[ hb_parclen( 3 ) + 1 ] = '\0';
|
||||
|
||||
xec->lpFunc = ( LPVOID ) GetProcAddress( xec->hDLL, xec->cProc ? ( LPCSTR ) xec->cProc : ( LPCSTR ) xec->wOrdinal );
|
||||
}
|
||||
|
||||
if( xec->lpFunc )
|
||||
hb_retptrGC( xec );
|
||||
else
|
||||
{
|
||||
hb_gcFree( xec );
|
||||
hb_errRT_BASE( EG_ARG, 2010, ISCHAR( 3 ) ? "GetProcAddress() invalid name argument" : "GetProcAddress() invalid ordinal argument", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
}
|
||||
else
|
||||
hb_errRT_BASE( EG_ARG, 2010, xec->cDLL ? "LoadLibrary() failed" : "Invalid handle argument", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
|
||||
xec->dwType = EXEC_DLL;
|
||||
xec->lpFunc = ( LPVOID ) GetProcAddress( xec->hDLL, xec->cProc ? ( LPCSTR ) xec->cProc : ( LPCSTR ) xec->wOrdinal );
|
||||
|
||||
if( xec->lpFunc == NULL && xec->cProc )
|
||||
{
|
||||
/* try ANSI flavour ? */
|
||||
xec->cProc[ hb_parclen( 3 ) ] = 'A';
|
||||
xec->cProc[ hb_parclen( 3 ) + 1 ] = '\0';
|
||||
|
||||
xec->lpFunc = ( LPVOID ) GetProcAddress( xec->hDLL, xec->cProc ? ( LPCSTR ) xec->cProc : ( LPCSTR ) xec->wOrdinal );
|
||||
hb_gcFree( xec );
|
||||
hb_errRT_BASE( EG_ARG, 2010, ISCHAR( 1 ) ? "LoadLibrary() failed" : "Invalid handle argument", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
if( xec->hDLL && xec->lpFunc )
|
||||
hb_retptrGC( xec );
|
||||
else if( xec->hDLL && xec->lpFunc == NULL )
|
||||
hb_errRT_BASE( EG_ARG, 2010, xec->cProc ? "GetProcAddress() invalid name argument" : "GetProcAddress() invalid ordinal argument", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||
}
|
||||
|
||||
HB_FUNC( DLLLOAD )
|
||||
@@ -890,4 +896,4 @@ HB_FUNC( CALLDLLTYPED )
|
||||
DllExec( DC_CALL_STD, hb_parni( 2 ), ( LPVOID ) hb_parptr( 1 ), NULL, hb_pcount(), 3 );
|
||||
}
|
||||
|
||||
#endif /* HB_OS_WIN32 */
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user