2010-05-26 22:54 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/contrib/hbwin/hbwinole.h
  * harbour/contrib/hbwin/olecore.c
    * modified hb_oleVariantUpdate() parameters
    + added automatic conversion of HVM objects to OLE objects for
      for parameters passed by reference to Harbour OLE server methods.

  * harbour/contrib/hbwin/hbolesrv.c
    + added automatic conversion of HVM objects to OLE objects for
      memvars redirected to OLE instance variables.
    ! fixed typo
This commit is contained in:
Przemyslaw Czerpak
2010-05-26 20:55:13 +00:00
parent e61c9f9c55
commit 67251071d1
4 changed files with 47 additions and 9 deletions

View File

@@ -17,6 +17,18 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-05-26 22:54 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbwin/hbwinole.h
* harbour/contrib/hbwin/olecore.c
* modified hb_oleVariantUpdate() parameters
+ added automatic conversion of HVM objects to OLE objects for
for parameters passed by reference to Harbour OLE server methods.
* harbour/contrib/hbwin/hbolesrv.c
+ added automatic conversion of HVM objects to OLE objects for
memvars redirected to OLE instance variables.
! fixed typo
2010-05-26 17:04 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.pt_BR.po

View File

@@ -433,7 +433,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII
pParams->cArgs == 0 )
{
if( pVarResult )
hb_oleItemToVariant( pVarResult, pItem );
hb_oleItemToVariantEx( pVarResult, pItem, s_objItemToVariant );
fResult = HB_TRUE;
}
else if( ( wFlags & DISPATCH_PROPERTYPUT ) != 0 &&
@@ -497,7 +497,7 @@ static HRESULT STDMETHODCALLTYPE Invoke( IDispatch* lpThis, DISPID dispid, REFII
{
PHB_ITEM pItem = hb_stackAllocItem();
hb_memvarGet( pItem, hb_dynsymSymbol( pDynSym ) );
hb_oleItemToVariant( pVarResult, pItem );
hb_oleItemToVariantEx( pVarResult, pItem, s_objItemToVariant );
hb_stackPop();
}
return S_OK;
@@ -611,6 +611,7 @@ static HB_BOOL s_objItemToVariant( VARIANT * pVariant, PHB_ITEM pItem )
{
pVariant->n1.n2.vt = VT_DISPATCH;
pVariant->n1.n2.n3.pdispVal = ( IDispatch * ) pvObj;
return HB_TRUE;
}
return HB_FALSE;
}

View File

@@ -113,7 +113,7 @@ extern HB_EXPORT void hb_oleSetError( HRESULT lOleError );
extern HB_EXPORT void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT * pVariant );
extern HB_EXPORT void hb_oleItemToVariant( VARIANT * pVariant, PHB_ITEM pItem );
extern HB_EXPORT void hb_oleItemToVariantEx( VARIANT* pVariant, PHB_ITEM pItem, HB_OLEOBJ_FUNC pObjFunc );
extern HB_EXPORT void hb_oleVariantUpdate( VARIANT * pVariant, PHB_ITEM pItem );
extern HB_EXPORT void hb_oleVariantUpdate( VARIANT * pVariant, PHB_ITEM pItem, HB_OLEOBJ_FUNC pObjFunc );
extern HB_EXPORT IDispatch* hb_oleParam( int iParam );
extern HB_EXPORT IDispatch* hb_oleItemGet( PHB_ITEM pItem );
extern HB_EXPORT PHB_ITEM hb_oleItemPut( PHB_ITEM pItem, IDispatch * pDisp );

View File

@@ -502,7 +502,7 @@ static void hb_oleItemToVariantRef( VARIANT* pVariant, PHB_ITEM pItem,
long lIndex[ 1 ];
VariantInit( &vItem );
hb_oleItemToVariantRef( &vItem, hb_arrayGetItemPtr( pItem, ul + 1 ), NULL, NULL );
hb_oleItemToVariantRef( &vItem, hb_arrayGetItemPtr( pItem, ul + 1 ), NULL, pObjFunc );
lIndex[ 0 ] = ( long ) ul;
SafeArrayPutElement( pSafeArray, lIndex, &vItem );
VariantClear( &vItem );
@@ -538,8 +538,8 @@ void hb_oleItemToVariant( VARIANT* pVariant, PHB_ITEM pItem )
}
void hb_oleItemToVariantExt( VARIANT* pVariant, PHB_ITEM pItem,
HB_OLEOBJ_FUNC pObjFunc )
void hb_oleItemToVariantEx( VARIANT* pVariant, PHB_ITEM pItem,
HB_OLEOBJ_FUNC pObjFunc )
{
hb_oleItemToVariantRef( pVariant, pItem, NULL, pObjFunc );
}
@@ -900,7 +900,8 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant )
}
void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem )
void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem,
HB_OLEOBJ_FUNC pObjFunc )
{
switch( pVariant->n1.n2.vt )
{
@@ -919,6 +920,18 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem )
HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) );
}
}
else if( pObjFunc && HB_IS_OBJECT( pItem ) )
{
VARIANTARG variant;
VariantInit( &variant );
if( pObjFunc( &variant, pItem ) )
{
IDispatch* pdispVal = *pVariant->n1.n2.n3.ppdispVal;
*pVariant->n1.n2.n3.ppdispVal = variant.n1.n2.n3.pdispVal;
if( pdispVal )
HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) );
}
}
break;
}
@@ -944,6 +957,18 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem )
}
}
}
else if( pObjFunc && HB_IS_OBJECT( pItem ) )
{
VARIANTARG variant;
VariantInit( &variant );
if( pObjFunc( &variant, pItem ) )
{
IDispatch* pdispVal = *pVariant->n1.n2.n3.ppdispVal;
*pVariant->n1.n2.n3.ppdispVal = variant.n1.n2.n3.pdispVal;
if( pdispVal )
HB_VTBL( pdispVal )->Release( HB_THIS( pdispVal ) );
}
}
break;
}
@@ -1041,7 +1066,7 @@ void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem )
#endif
case VT_BYREF | VT_VARIANT:
hb_oleItemToVariantRef( pVariant->n1.n2.n3.pvarVal, pItem, NULL, NULL );
hb_oleItemToVariantRef( pVariant->n1.n2.n3.pvarVal, pItem, NULL, pObjFunc );
break;
case VT_VARIANT | VT_ARRAY | VT_BYREF:
@@ -1121,7 +1146,7 @@ HB_BOOL hb_oleDispInvoke( PHB_SYMB pSym, PHB_ITEM pObject, PHB_ITEM pParam,
hb_oleItemToVariantRef( pVarResult, hb_stackReturnItem(), NULL, pObjFunc );
for( i = 0; i < iRefs; i++ )
hb_oleVariantUpdate( refArray[ i ].variant, refArray[ i ].item );
hb_oleVariantUpdate( refArray[ i ].variant, refArray[ i ].item, pObjFunc );
for( i = 0; i < iRefs; i++ )
hb_stackPop();