static int custom_load_cb( mxml_node_t * node, const char * data ) { HB_CUSTOM_CBS_VAR * pCCbs = ( HB_CUSTOM_CBS_VAR * ) hb_stackTestTSD( &s_custom_cbs_var ); if( node != NULL && pCCbs != NULL && data != NULL ) { PHB_ITEM pCallback = pCCbs->load_cb; if( pCallback && hb_vmRequestReenter() ) { int iResult; hb_vmPushEvalSym(); hb_vmPush( pCallback ); mxml_node_push( node, 0 ); hb_itemPutC( hb_stackAllocItem(), data ); hb_vmSend( 2 ); iResult = hb_parnidef( -1, 1 ); hb_vmRequestRestore(); return iResult; } } return 1; }
static VOID WINAPI hbwin_SvcMainFunction( DWORD dwArgc, LPTSTR * lpszArgv ) { s_ServiceStatus.dwServiceType = SERVICE_WIN32; s_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; s_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; s_ServiceStatus.dwWin32ExitCode = 0; s_ServiceStatus.dwServiceSpecificExitCode = 0; s_ServiceStatus.dwCheckPoint = 0; s_ServiceStatus.dwWaitHint = 0; s_hStatus = RegisterServiceCtrlHandler( s_lpServiceName, ( LPHANDLER_FUNCTION ) hbwin_SvcControlHandler ); if( s_hStatus != ( SERVICE_STATUS_HANDLE ) 0 ) { if( s_pHarbourEntryFunc != NULL ) { if( hb_vmRequestReenterExt() ) { DWORD i; int iArgCount = 0; if( ! s_pHarbourControlFunc ) { /* We report the running status to SCM. */ s_ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus( s_hStatus, &s_ServiceStatus ); } hb_vmPushEvalSym(); hb_vmPush( s_pHarbourEntryFunc ); for( i = 1; i < dwArgc; ++i ) { PHB_ITEM pItem = hb_stackAllocItem(); HB_ITEMPUTSTR( pItem, lpszArgv[ i ] ); if( hb_cmdargIsInternal( hb_itemGetCPtr( pItem ), NULL ) ) hb_stackPop(); else ++iArgCount; } hb_vmSend( ( HB_USHORT ) iArgCount ); hb_vmRequestRestore(); } else HB_TRACE( HB_TR_DEBUG, ( "HVM stack not available" ) ); } else HB_TRACE( HB_TR_DEBUG, ( "Harbour service entry function not found" ) ); } else HB_TRACE( HB_TR_DEBUG, ( "Error registering service" ) ); }
static void error_cb( const char * pszErrorMsg ) { HB_ERROR_CB_VAR * pError_cb = ( HB_ERROR_CB_VAR * ) hb_stackTestTSD( &s_error_cb_var ); if( pError_cb != NULL ) { PHB_ITEM pCallback = pError_cb->error_cb; if( pCallback && hb_vmRequestReenter() ) { hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_itemPutC( hb_stackAllocItem(), pszErrorMsg ); hb_vmSend( 1 ); hb_vmRequestRestore(); } } }
int hb_cmdargPushArgs( void ) { int iArgCount = 0, i; for( i = 1; i < s_argc; i++ ) { /* Filter out any parameters beginning with //, like //INFO */ if( ! hb_cmdargIsInternal( s_argv[ i ], NULL ) ) { #if defined( HB_OS_WIN ) if( s_lpArgV ) HB_ITEMPUTSTR( hb_stackAllocItem(), s_lpArgV[ i ] ); else #endif hb_vmPushString( s_argv[ i ], strlen( s_argv[ i ] ) ); iArgCount++; } } return iArgCount; }
static HRESULT STDMETHODCALLTYPE Invoke( IDispatch * lpThis, DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pParams, VARIANT * pVarResult, EXCEPINFO * pExcepInfo, UINT * puArgErr ) { PHB_ITEM pAction; HRESULT hr; HB_SYMBOL_UNUSED( lcid ); HB_SYMBOL_UNUSED( wFlags ); HB_SYMBOL_UNUSED( pExcepInfo ); HB_SYMBOL_UNUSED( puArgErr ); if( ! IsEqualIID( riid, HB_ID_REF( IID_NULL ) ) ) return DISP_E_UNKNOWNINTERFACE; hr = DISP_E_MEMBERNOTFOUND; pAction = ( ( ISink * ) lpThis )->pItemHandler; if( pAction ) { PHB_ITEM pKey = hb_itemPutNL( hb_stackAllocItem(), ( long ) dispid ); if( pAction && HB_IS_HASH( pAction ) ) { pAction = hb_hashGetItemPtr( pAction, pKey, 0 ); pKey = NULL; } if( pAction && hb_oleDispInvoke( NULL, pAction, pKey, pParams, pVarResult, NULL, ( ( ISink * ) lpThis )->uiClass ) ) hr = S_OK; hb_stackPop(); } return hr; }
static HRESULT STDMETHODCALLTYPE Invoke( IDispatch * lpThis, DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pParams, VARIANT * pVarResult, EXCEPINFO * pExcepInfo, UINT * puArgErr ) { PHB_DYNS pDynSym; PHB_ITEM pAction; HB_USHORT uiClass = 0; HB_SYMBOL_UNUSED( lcid ); HB_SYMBOL_UNUSED( pExcepInfo ); HB_SYMBOL_UNUSED( puArgErr ); if( ! IsEqualIID( riid, HB_ID_REF( IID_NULL ) ) ) return DISP_E_UNKNOWNINTERFACE; pAction = ( ( IHbOleServer * ) lpThis )->pAction; if( ! pAction ) pAction = s_pAction; if( pAction ) { HB_BOOL fResult = HB_FALSE; if( s_pMsgHash ) { if( ( wFlags & DISPATCH_METHOD ) != 0 || ( ( wFlags & DISPATCH_PROPERTYGET ) != 0 && pParams->cArgs == 0 ) || ( ( wFlags & DISPATCH_PROPERTYPUT ) != 0 && pParams->cArgs == 1 ) ) { fResult = hb_oleDispInvoke( NULL, pAction, hb_hashGetKeyAt( s_pMsgHash, ( HB_SIZE ) dispid ), pParams, pVarResult, s_objItemToVariant, uiClass ); } } else if( HB_IS_HASH( pAction ) ) { PHB_ITEM pItem; if( ( ( IHbOleServer * ) lpThis )->fGuids ) { PHB_ITEM pKey = hb_itemPutNL( hb_stackAllocItem(), ( long ) dispid ); pItem = hb_hashGetItemPtr( pAction, pKey, 0 ); hb_stackPop(); } else pItem = hb_hashGetValueAt( pAction, ( HB_SIZE ) dispid ); if( pItem ) { if( HB_IS_EVALITEM( pItem ) ) { if( ( wFlags & DISPATCH_METHOD ) != 0 ) { PHB_SYMB pSym = hb_itemGetSymbol( pItem ); fResult = hb_oleDispInvoke( pSym, pSym ? pAction : pItem, NULL, pParams, pVarResult, s_objItemToVariant, uiClass ); } } else if( ( wFlags & DISPATCH_PROPERTYGET ) != 0 && pParams->cArgs == 0 ) { if( pVarResult ) hb_oleItemToVariantEx( pVarResult, pItem, s_objItemToVariant ); fResult = HB_TRUE; } else if( ( wFlags & DISPATCH_PROPERTYPUT ) != 0 && pParams->cArgs == 1 ) { hb_oleVariantToItemEx( pItem, &pParams->rgvarg[ 0 ], uiClass ); fResult = HB_TRUE; } } } else if( HB_IS_OBJECT( pAction ) ) { pDynSym = hb_dispIdToDynsym( dispid ); if( pDynSym && ( wFlags & DISPATCH_PROPERTYPUT ) != 0 ) { if( pParams->cArgs == 1 ) { char szName[ HB_SYMBOL_NAME_LEN + 1 ]; szName[ 0 ] = '_'; hb_strncpy( szName + 1, hb_dynsymName( pDynSym ), sizeof( szName ) - 2 ); pDynSym = hb_dynsymFindName( szName ); } else pDynSym = NULL; } if( pDynSym && hb_objHasMessage( pAction, pDynSym ) ) { fResult = hb_oleDispInvoke( hb_dynsymSymbol( pDynSym ), pAction, NULL, pParams, pVarResult, s_objItemToVariant, uiClass ); } } if( ! fResult ) return DISP_E_MEMBERNOTFOUND; } else { pDynSym = hb_dispIdToDynsym( dispid ); if( ! pDynSym ) return DISP_E_MEMBERNOTFOUND; if( wFlags & DISPATCH_PROPERTYPUT ) { if( pParams->cArgs == 1 && hb_dynsymIsMemvar( pDynSym ) ) { PHB_ITEM pItem = hb_stackAllocItem(); hb_oleVariantToItemEx( pItem, &pParams->rgvarg[ 0 ], uiClass ); hb_memvarSetValue( hb_dynsymSymbol( pDynSym ), pItem ); hb_stackPop(); return S_OK; } else return DISP_E_MEMBERNOTFOUND; } else if( ( wFlags & DISPATCH_PROPERTYGET ) && pParams->cArgs == 0 && hb_dynsymIsMemvar( pDynSym ) ) { if( pVarResult ) { PHB_ITEM pItem = hb_stackAllocItem(); hb_memvarGet( pItem, hb_dynsymSymbol( pDynSym ) ); hb_oleItemToVariantEx( pVarResult, pItem, s_objItemToVariant ); hb_stackPop(); } return S_OK; } else if( ( wFlags & DISPATCH_METHOD ) == 0 || ! hb_dynsymIsFunction( pDynSym ) ) return DISP_E_MEMBERNOTFOUND; else if( ! hb_oleDispInvoke( hb_dynsymSymbol( pDynSym ), NULL, NULL, pParams, pVarResult, s_objItemToVariant, uiClass ) ) return DISP_E_MEMBERNOTFOUND; } return S_OK; }
static HRESULT STDMETHODCALLTYPE GetIDsOfNames( IDispatch * lpThis, REFIID riid, LPOLESTR * rgszNames, UINT cNames, LCID lcid, DISPID * rgDispId ) { HRESULT hr = S_OK; HB_SYMBOL_UNUSED( lcid ); if( ! IsEqualIID( riid, HB_ID_REF( IID_NULL ) ) ) hr = DISP_E_UNKNOWNINTERFACE; else if( ( ( IHbOleServer * ) lpThis )->fGuids ) return E_NOTIMPL; else if( cNames > 0 ) { char szName[ HB_SYMBOL_NAME_LEN + 1 ]; DISPID dispid = 0; UINT ui; if( s_WideToAnsiBuffer( rgszNames[ 0 ], szName, ( int ) sizeof( szName ) ) != 0 ) { PHB_ITEM pAction; pAction = ( ( IHbOleServer * ) lpThis )->pAction; if( ! pAction ) pAction = s_pAction; if( pAction ) { if( s_pMsgHash ) { HB_SIZE nPos = hb_hashGetCItemPos( s_pMsgHash, szName ); if( nPos == 0 ) { PHB_ITEM pKey = hb_itemPutC( hb_stackAllocItem(), szName ); if( hb_hashAdd( s_pMsgHash, pKey, NULL ) ) hb_hashScan( s_pMsgHash, pKey, &nPos ); hb_stackPop(); } dispid = ( DISPID ) nPos; } else if( HB_IS_HASH( pAction ) ) { HB_SIZE nPos = hb_hashGetCItemPos( pAction, szName ); if( nPos ) dispid = ( DISPID ) nPos; } else if( HB_IS_OBJECT( pAction ) ) { PHB_DYNS pDynSym = hb_dynsymFindName( szName ); if( pDynSym && hb_objHasMessage( pAction, pDynSym ) ) dispid = hb_dynsymToDispId( pDynSym ); } } else { PHB_DYNS pDynSym = hb_dynsymFindName( szName ); if( pDynSym && ( hb_dynsymIsFunction( pDynSym ) || hb_dynsymIsMemvar( pDynSym ) ) ) dispid = hb_dynsymToDispId( pDynSym ); } } for( ui = 0; ui < cNames; ++ui ) rgDispId[ ui ] = DISPID_UNKNOWN; hr = DISP_E_UNKNOWNNAME; if( dispid ) { rgDispId[ 0 ] = dispid; if( cNames == 1 ) hr = S_OK; } } return hr; }
static void mxml_node_push( mxml_node_t * node, int iNew ) { hb_itemPutPtrGC( hb_stackAllocItem(), mxml_node_new( node, iNew ) ); }