static HRESULT s_createHbOleObject( REFIID riid, void ** ppvObj,
                                    PHB_ITEM pAction, HB_BOOL fGuids )
{
   HRESULT hr;
   IHbOleServer * thisobj = ( IHbOleServer * ) hb_xalloc( sizeof( IHbOleServer ) );

   if( ! thisobj )
   {
      if( pAction )
         hb_itemRelease( pAction );
      hr = E_OUTOFMEMORY;
   }
   else
   {
      InterlockedIncrement( &s_lObjectCount );

      thisobj->lpVtbl = &IHbOleServer_Vtbl;
      thisobj->count = 1;
      thisobj->pAction = pAction;
      thisobj->fGuids = fGuids;

      hr = IHbOleServer_Vtbl.QueryInterface( ( IDispatch * ) thisobj, riid, ppvObj );
      IHbOleServer_Vtbl.Release( ( IDispatch * ) thisobj );
   }
   return hr;
}
Beispiel #2
0
static HRESULT
Observable_CreateInstance(
    REFIID guidVtbl, void **ppv
) {
    HRESULT              hr;
    Observable          *pObservable;
    
    if (!(pObservable = GlobalAlloc(GMEM_FIXED, sizeof(Observable))))
    {
        hr = E_OUTOFMEMORY;
    }
    else
    {
        pObservable->lpVtbl = &ObservableVtbl;
        pObservable->dwCount = 1;

        InterlockedIncrement(pdwLockCount);

        hr = ObservableVtbl.QueryInterface((IDispatch*) pObservable, guidVtbl, ppv);

        ObservableVtbl.Release((IDispatch*) pObservable);

        *ppv = pObservable;
    }
    return hr;
}