From 7f2ff9b35f1fbad9c970f5ddb7ea52b22833a723 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Mon, 13 Sep 2010 15:01:10 +0000 Subject: [PATCH] 2010-09-13 17:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/contrib/hbwin/hbwinole.h * harbour/contrib/hbwin/axcore.c * harbour/contrib/hbwin/olecore.c * harbour/contrib/hbwin/hbolesrv.c + added new 'HB_USHORT uiClass' parameter to hb_oleDispInvoke() C function and updated corresponding code. --- harbour/ChangeLog | 8 ++++++++ harbour/contrib/hbwin/axcore.c | 5 ++++- harbour/contrib/hbwin/hbolesrv.c | 20 ++++++++++++-------- harbour/contrib/hbwin/hbwinole.h | 2 +- harbour/contrib/hbwin/olecore.c | 9 +++++---- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index fbd57b898a..018a0ea1e0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,14 @@ The license applies to all entries newer than 2009-04-28. */ +2010-09-13 17:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/contrib/hbwin/hbwinole.h + * harbour/contrib/hbwin/axcore.c + * harbour/contrib/hbwin/olecore.c + * harbour/contrib/hbwin/hbolesrv.c + + added new 'HB_USHORT uiClass' parameter to hb_oleDispInvoke() + C function and updated corresponding code. + 2010-09-13 15:46 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/contrib/hbwin/olecore.c ! use hb_oleVariantToItemEx() instead of hb_oleVariantToItem() diff --git a/harbour/contrib/hbwin/axcore.c b/harbour/contrib/hbwin/axcore.c index 418d622b13..04ee7cc689 100644 --- a/harbour/contrib/hbwin/axcore.c +++ b/harbour/contrib/hbwin/axcore.c @@ -241,6 +241,7 @@ typedef struct { DWORD dwCookie; IID rriid; PHB_ITEM pItemHandler; + HB_USHORT uiClass; } ISink; @@ -350,7 +351,8 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII } if( pAction && hb_oleDispInvoke( NULL, pAction, pKey, - pParams, pVarResult, NULL ) ) + pParams, pVarResult, NULL, + ( ( ISink* ) lpThis )->uiClass ) ) hr = S_OK; hb_stackPop(); @@ -414,6 +416,7 @@ HB_FUNC( __AXREGISTERHANDLER ) /* ( pDisp, bHandler [, cID] ) --> pSink */ hb_oleItemSetCallBack( hb_param( 1, HB_IT_POINTER ), &pSink->pItemHandler ); pSink->rriid = rriid; + pSink->uiClass = 0; lOleError = HB_VTBL( pCP )->Advise( HB_THIS_( pCP ) ( IUnknown* ) pSink, &dwCookie ); pSink->pConnectionPoint = pCP; pSink->dwCookie = dwCookie; diff --git a/harbour/contrib/hbwin/hbolesrv.c b/harbour/contrib/hbwin/hbolesrv.c index 354c3767cb..7bdd003d70 100644 --- a/harbour/contrib/hbwin/hbolesrv.c +++ b/harbour/contrib/hbwin/hbolesrv.c @@ -368,6 +368,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII { PHB_DYNS pDynSym; PHB_ITEM pAction; + HB_USHORT uiClass = 0; HB_SYMBOL_UNUSED( lcid ); HB_SYMBOL_UNUSED( pExcepInfo ); @@ -392,7 +393,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII { fResult = hb_oleDispInvoke( NULL, pAction, hb_hashGetKeyAt( s_pMsgHash, ( HB_SIZE ) dispid ), - pParams, pVarResult, s_objItemToVariant ); + pParams, pVarResult, s_objItemToVariant, uiClass ); } } else if( HB_IS_HASH( pAction ) ) @@ -416,7 +417,8 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII { PHB_SYMB pSym = hb_itemGetSymbol( pItem ); fResult = hb_oleDispInvoke( pSym, pSym ? pAction : pItem, NULL, - pParams, pVarResult, s_objItemToVariant ); + pParams, pVarResult, + s_objItemToVariant, uiClass ); } } else if( ( wFlags & DISPATCH_PROPERTYGET ) != 0 && @@ -429,7 +431,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII else if( ( wFlags & DISPATCH_PROPERTYPUT ) != 0 && pParams->cArgs == 1 ) { - hb_oleVariantToItem( pItem, &pParams->rgvarg[ 0 ] ); + hb_oleVariantToItemEx( pItem, &pParams->rgvarg[ 0 ], uiClass ); fResult = HB_TRUE; } } @@ -451,8 +453,9 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII } if( pDynSym && hb_objHasMessage( pAction, pDynSym ) ) { - fResult = hb_oleDispInvoke( hb_dynsymSymbol( pDynSym ), pAction, NULL, - pParams, pVarResult, s_objItemToVariant ); + fResult = hb_oleDispInvoke( hb_dynsymSymbol( pDynSym ), + pAction, NULL, pParams, pVarResult, + s_objItemToVariant, uiClass ); } } if( !fResult ) @@ -470,7 +473,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII { PHB_ITEM pItem = hb_stackAllocItem(); - hb_oleVariantToItem( pItem, &pParams->rgvarg[ 0 ] ); + hb_oleVariantToItemEx( pItem, &pParams->rgvarg[ 0 ], uiClass ); hb_memvarSetValue( hb_dynsymSymbol( pDynSym ), pItem ); hb_stackPop(); return S_OK; @@ -493,8 +496,9 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII 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 ) ) + else if( !hb_oleDispInvoke( hb_dynsymSymbol( pDynSym ), + NULL, NULL, pParams, pVarResult, + s_objItemToVariant, uiClass ) ) return DISP_E_MEMBERNOTFOUND; } diff --git a/harbour/contrib/hbwin/hbwinole.h b/harbour/contrib/hbwin/hbwinole.h index 334c24f1a4..5848c2ea22 100644 --- a/harbour/contrib/hbwin/hbwinole.h +++ b/harbour/contrib/hbwin/hbwinole.h @@ -158,7 +158,7 @@ extern HB_EXPORT PHB_ITEM hb_oleItemGetCallBack( PHB_ITEM pItem ); extern HB_EXPORT void hb_oleItemSetCallBack( PHB_ITEM pItem, PHB_ITEM * pCallBack ); extern HB_EXPORT HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam, DISPPARAMS * pParams, VARIANT* pVarResult, - HB_OLEOBJ_FUNC pObjFunc ); + HB_OLEOBJ_FUNC pObjFunc, HB_USHORT uiClass ); /* activex control */ extern HB_EXPORT HB_BOOL hb_oleAxInit( void ); diff --git a/harbour/contrib/hbwin/olecore.c b/harbour/contrib/hbwin/olecore.c index 0f1f1423f2..351a70efdb 100644 --- a/harbour/contrib/hbwin/olecore.c +++ b/harbour/contrib/hbwin/olecore.c @@ -1100,7 +1100,7 @@ HB_OLE_PARAM_REF; HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam, DISPPARAMS* pParams, VARIANT* pVarResult, - HB_OLEOBJ_FUNC pObjFunc ) + HB_OLEOBJ_FUNC pObjFunc, HB_USHORT uiClass ) { if( !pSym && HB_IS_SYMBOL( pObject ) ) { @@ -1143,12 +1143,13 @@ HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam, ( ii < iRefs ) ) { refArray[ ii ].variant = &pParams->rgvarg[ iCount - i ]; - hb_oleVariantToItem( refArray[ ii ].item, refArray[ ii ].variant ); + hb_oleVariantToItemEx( refArray[ ii ].item, + refArray[ ii ].variant, uiClass ); hb_vmPushItemRef( refArray[ ii++ ].item ); } else - hb_oleVariantToItem( hb_stackAllocItem(), - &pParams->rgvarg[ iCount - i ] ); + hb_oleVariantToItemEx( hb_stackAllocItem(), + &pParams->rgvarg[ iCount - i ], uiClass ); } if( pObject && !HB_IS_HASH( pObject ) )