diff --git a/ChangeLog.txt b/ChangeLog.txt index 3eb7c38d5b..d06606b3f8 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,11 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2017-05-12 17:37 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/hbwin/olecore.c + + added support for typed variant array references created + by __oleVariantNew() + 2017-05-12 17:21 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbwin/oleauto.prg * contrib/hbwin/olecore.c diff --git a/contrib/hbwin/olecore.c b/contrib/hbwin/olecore.c index 5e5ab6ab0f..957f39d172 100644 --- a/contrib/hbwin/olecore.c +++ b/contrib/hbwin/olecore.c @@ -477,6 +477,12 @@ static void hb_oleStringToItem( BSTR strVal, PHB_ITEM pItem ) static void hb_oleVariantRef( VARIANT * pVariant, VARIANT * pVarRef ) { + if( V_VT( pVariant ) & VT_BYREF ) + { + VariantCopy( pVarRef, pVariant ); + return; + } + V_VT( pVarRef ) = V_VT( pVariant ) | VT_BYREF; switch( V_VT( pVariant ) ) @@ -543,8 +549,13 @@ static void hb_oleVariantRef( VARIANT * pVariant, VARIANT * pVarRef ) V_BSTRREF( pVarRef ) = &V_BSTR( pVariant ); break; default: - V_VT( pVarRef ) = VT_VARIANT | VT_BYREF; - V_BYREF( pVarRef ) = pVariant; + if( V_VT( pVariant ) & VT_ARRAY ) + V_ARRAYREF( pVarRef ) = &V_ARRAY( pVariant ); + else + { + V_VT( pVarRef ) = VT_VARIANT | VT_BYREF; + V_BYREF( pVarRef ) = pVariant; + } break; } }