From cbbe41428a4dc3433866fa295e2a3189cd141a1f Mon Sep 17 00:00:00 2001 From: Antonio Linares Date: Fri, 28 Dec 2001 17:34:27 +0000 Subject: [PATCH] extend system for pcode DLLs implementation started --- harbour/source/vm/maindllp.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/harbour/source/vm/maindllp.c b/harbour/source/vm/maindllp.c index a0a8f4351b..cd7a852afa 100644 --- a/harbour/source/vm/maindllp.c +++ b/harbour/source/vm/maindllp.c @@ -65,6 +65,10 @@ typedef void ( * VM_PROCESS_DLL_SYMBOLS ) ( PHB_SYMB pModuleSymbols, typedef void ( * VM_DLL_EXECUTE ) ( const BYTE * pCode, PHB_SYMB pSymbols ); +typedef BOOL ( * EXT_IS_ARRAY ) ( int iParam ); +typedef char * ( * EXT_PARC1 ) ( int iParam ); +typedef char * ( * EXT_PARC2 ) ( int iParam, ULONG ulArrayIndex ); + #if defined(HB_OS_WIN_32) @@ -116,4 +120,31 @@ void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ) * may we issue an error ? */ } +/* extend API implementation for pcode DLLs */ + +char * hb_parc( int iParam, ... ) +{ + FARPROC pExtIsArray = GetProcAddress( GetModuleHandle( NULL ), "_hb_extIsArray" ); + FARPROC pParC = GetProcAddress( GetModuleHandle( NULL ), "_hb_parc" ); + + if( pExtIsArray && pParC ) + { + if( ( ( EXT_IS_ARRAY ) pExtIsArray ) ( iParam ) ) + { + va_list va; + ULONG ulArrayIndex; + + va_start( va, iParam ); + ulArrayIndex = va_arg( va, ULONG ); + va_end( va ); + + return ( ( EXT_PARC2 ) pParC )( iParam, ulArrayIndex ); + } + else + return ( ( EXT_PARC1 ) pParC )( iParam ); + } + else + return ""; +} + #endif \ No newline at end of file