diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0faf16d804..ac1db8e503 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,12 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-14 16:59 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/contrib/hbwin/olecore.c + ! added missing parenthesis + + added support to translate 1 dimensional arrays of variants + to HVM arrays + 2009-08-14 16:51 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/bsd/gcc.cf * config/hpux/gcc.cf diff --git a/harbour/contrib/hbwin/olecore.c b/harbour/contrib/hbwin/olecore.c index facf333c3f..c6fd778986 100644 --- a/harbour/contrib/hbwin/olecore.c +++ b/harbour/contrib/hbwin/olecore.c @@ -388,7 +388,7 @@ PHB_ITEM hb_oleItemPut( PHB_ITEM pItem, IDispatch* pDisp ) void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) { - if( pVariant->n1.n2.vt == VT_VARIANT | VT_BYREF ) + if( pVariant->n1.n2.vt == ( VT_VARIANT | VT_BYREF ) ) pVariant = pVariant->n1.n2.n3.pvarVal; switch( pVariant->n1.n2.vt ) @@ -624,6 +624,39 @@ void hb_oleVariantToItem( PHB_ITEM pItem, VARIANT* pVariant ) break; #endif + case VT_VARIANT | VT_ARRAY: + case VT_VARIANT | VT_ARRAY | VT_BYREF: + { + SAFEARRAY * pSafeArray = pVariant->n1.n2.vt & VT_BYREF ? + *pVariant->n1.n2.n3.pparray : + pVariant->n1.n2.n3.parray; + if( pSafeArray && SafeArrayGetDim( pSafeArray ) == 1 ) + { + long lFrom, lTo; + + SafeArrayGetLBound( pSafeArray, 1, &lFrom ); + SafeArrayGetUBound( pSafeArray, 1, &lTo ); + if( lFrom >= lTo ) + { + VARIANT vItem; + ULONG ul = 0; + + hb_arrayNew( pItem, lTo - lFrom + 1 ); + VariantInit( &vItem ); + do + { + if( SUCCEEDED( SafeArrayGetElement( pSafeArray, &lFrom, &vItem ) ) ) + { + hb_oleVariantToItem( hb_arrayGetItemPtr( pItem, ul++ ), &vItem ); + VariantClear( &vItem ); + } + } + while( ++lFrom <= lTo ); + break; + } + } + } + default: hb_itemClear( pItem ); }