// testLink.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <oaidl.h>
int _tmain(int argc, _TCHAR* argv[])
{
double array[2]={1.0,2.0};
double array1[2]={0.0,0.0};
VARIANT vt;
vt.vt = VT_ARRAY|VT_R8;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 2;
SAFEARRAY *psa = SafeArrayCreate( VT_R8,1, rgsabound );
//打包数据方法一
char *pData = NULL;
SafeArrayAccessData( psa, (void **)&pData );
memcpy(pData, (char *)&array[0],8);
memcpy(pData+8, (char *)&array[1],8);
SafeArrayUnaccessData(psa);
/*打包数据方法二
for(long i=0;i<2;i++)
{
SafeArrayPutElement(psa,&i,&array[i]);
}
*/
vt.parray = psa;
//取元素
for(long j=0;j<2;j++)
{
SafeArrayGetElement(psa,&j,&array1[j]);
}
return 0;
}
取VARIANT中元素内容使用到的一些函数, (VARIANT &vArg )
//类型检查
if( ( VT_NULL == vArg.vt ) || ( VT_EMPTY == vArg.vt ) )
{
return -1;
}
else if( 0 == ( vArg.vt & VT_ARRAY ) )
{
//错误的变体类型
return -1;
}
//检查数组是否一维
SAFEARRAY *psa = vArg.parray;
UINT nDims = SafeArrayGetDim( psa );
if( nDims != 1 )
{
//不是一维数组
return -1;
}
//检查数组元素类型
VARTYPE vt = 0;
SafeArrayGetVartype( psa, &vt );
if( vt != VT_UI1 )
{
//错误的元素数据类型
return -1;
}
//检查数组上下限和元素个数
LONG lUBound =0, lLBound = 0;
SafeArrayGetUBound( psa, 1, &lUBound );
SafeArrayGetLBound( psa, 1, &lLBound );
long lElements = lUBound - lLBound + 1;
if( 0 == lElements )
{
return -1;
}
else if( lElements < 0 /*|| lElements > 255*/ )
{
//数组元素个数错误
return GPS_ERR_PARAMETER;
}
//取数据内容地址
BYTE *pData = NULL;
SafeArrayAccessData( psa, (void **)&pData );
if( NULL == pData )
{
return -1;
}
。。。。。。
SafeArrayUnaccessData( psa );
return 0;