2017-05-10 07:55 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* contrib/hbwin/olecore.c
* minor modification in order of helper functions
This commit is contained in:
@@ -10,6 +10,10 @@
|
||||
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
|
||||
*/
|
||||
|
||||
2017-05-10 07:55 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* contrib/hbwin/olecore.c
|
||||
* minor modification in order of helper functions
|
||||
|
||||
2017-05-10 07:50 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* contrib/hbwin/olecore.c
|
||||
* added additional protection to reduce hb_oleSafeArrayToString()
|
||||
|
||||
@@ -386,53 +386,6 @@ static IEnumVARIANT * hb_oleenumParam( int iParam )
|
||||
}
|
||||
|
||||
|
||||
static SAFEARRAY * hb_oleSafeArrayFromString( PHB_ITEM pItem, VARTYPE vt )
|
||||
{
|
||||
UINT cElements = ( UINT ) hb_itemGetCLen( pItem );
|
||||
SAFEARRAY * pSafeArray = SafeArrayCreateVector( vt, 0, cElements );
|
||||
|
||||
if( pSafeArray && cElements > 0 )
|
||||
{
|
||||
void * pData;
|
||||
if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK )
|
||||
{
|
||||
memcpy( pData, hb_itemGetCPtr( pItem ), cElements );
|
||||
SafeArrayUnaccessData( pSafeArray );
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeArrayDestroy( pSafeArray );
|
||||
pSafeArray = NULL;
|
||||
}
|
||||
}
|
||||
return pSafeArray;
|
||||
}
|
||||
|
||||
|
||||
static HB_BOOL hb_oleSafeArrayToString( PHB_ITEM pItem, SAFEARRAY * pSafeArray )
|
||||
{
|
||||
long lFrom, lTo;
|
||||
VARTYPE vt;
|
||||
|
||||
if( SafeArrayGetElemsize( pSafeArray ) == 1 &&
|
||||
SafeArrayGetVartype( pSafeArray, &vt ) == S_OK &&
|
||||
( vt == VT_I1 || vt == VT_UI1 ) &&
|
||||
SafeArrayGetLBound( pSafeArray, 1, &lFrom ) == S_OK &&
|
||||
SafeArrayGetUBound( pSafeArray, 1, &lTo ) == S_OK &&
|
||||
lFrom <= lTo + 1 ) /* accept empty arrays */
|
||||
{
|
||||
void * pData;
|
||||
if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK )
|
||||
{
|
||||
hb_itemPutCL( pItem, ( const char * ) pData, lTo - lFrom + 1 );
|
||||
SafeArrayUnaccessData( pSafeArray );
|
||||
return HB_TRUE;
|
||||
}
|
||||
}
|
||||
return HB_FALSE;
|
||||
}
|
||||
|
||||
|
||||
static VARIANT * hb_oleVariantParam( int iParam )
|
||||
{
|
||||
VARIANT * pVariant = ( VARIANT * ) hb_parptrGC( &s_gcVariantFuncs, iParam );
|
||||
@@ -506,6 +459,53 @@ static void hb_oleStringToItem( BSTR strVal, PHB_ITEM pItem )
|
||||
}
|
||||
|
||||
|
||||
static SAFEARRAY * hb_oleSafeArrayFromString( PHB_ITEM pItem, VARTYPE vt )
|
||||
{
|
||||
UINT cElements = ( UINT ) hb_itemGetCLen( pItem );
|
||||
SAFEARRAY * pSafeArray = SafeArrayCreateVector( vt, 0, cElements );
|
||||
|
||||
if( pSafeArray && cElements > 0 )
|
||||
{
|
||||
void * pData;
|
||||
if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK )
|
||||
{
|
||||
memcpy( pData, hb_itemGetCPtr( pItem ), cElements );
|
||||
SafeArrayUnaccessData( pSafeArray );
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeArrayDestroy( pSafeArray );
|
||||
pSafeArray = NULL;
|
||||
}
|
||||
}
|
||||
return pSafeArray;
|
||||
}
|
||||
|
||||
|
||||
static HB_BOOL hb_oleSafeArrayToString( PHB_ITEM pItem, SAFEARRAY * pSafeArray )
|
||||
{
|
||||
long lFrom, lTo;
|
||||
VARTYPE vt;
|
||||
|
||||
if( SafeArrayGetElemsize( pSafeArray ) == 1 &&
|
||||
SafeArrayGetVartype( pSafeArray, &vt ) == S_OK &&
|
||||
( vt == VT_I1 || vt == VT_UI1 ) &&
|
||||
SafeArrayGetLBound( pSafeArray, 1, &lFrom ) == S_OK &&
|
||||
SafeArrayGetUBound( pSafeArray, 1, &lTo ) == S_OK &&
|
||||
lFrom <= lTo + 1 ) /* accept empty arrays */
|
||||
{
|
||||
void * pData;
|
||||
if( SafeArrayAccessData( pSafeArray, &pData ) == S_OK )
|
||||
{
|
||||
hb_itemPutCL( pItem, ( const char * ) pData, lTo - lFrom + 1 );
|
||||
SafeArrayUnaccessData( pSafeArray );
|
||||
return HB_TRUE;
|
||||
}
|
||||
}
|
||||
return HB_FALSE;
|
||||
}
|
||||
|
||||
|
||||
IDispatch * hb_oleItemGetDispatch( PHB_ITEM pItem )
|
||||
{
|
||||
if( HB_IS_OBJECT( pItem ) )
|
||||
|
||||
Reference in New Issue
Block a user