From 4ac9d09475c1b9ea6de1c0aec0356701d39a0c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Fri, 12 May 2017 17:37:06 +0200 Subject: [PATCH] 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() --- ChangeLog.txt | 5 +++++ contrib/hbwin/olecore.c | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) 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; } }