VARIANT变量是COM组件之间互相通讯的重要的参数变量之一,它能够容纳多种不一样的类型,如short、long、double等,包括各种指针和数组。组件之间的互相调用是比较耗时的,尤为带当组件位于不一样进程中时,所以,减小传递次数是提升效率的一种有效方法。其中,Excel表格的操做就可能涉及到大量数据,一次传递一个二维数组是提升对Excel表的操做效率。下面以两种不一样方式来实现VARIANT二维数组的操做。数组
一、使用SAFEARRAY实现二维数组安全
SAFEARRAY安全数组能够实现多维数组,SAFEARRAY实现的步骤能够大体分为三步。函数
(1)建立SAFEARRAY安全数组,包括设置数组元素的类型、数据的维数,大小等。指针
(2)对SAFEARRAY数组赋值,既可经过SafeArrayPutElement函数逐个元素进行负责,也可经过指针来得到SAFEARRAY的数据地址,而后对指针指向的值进行赋值操做。其中,若是SAFEARRAY中的数组时多维数组,便可以把多维数组转换为一维数组,也能够经过得到指向数组的指针方式来操做数组中的元素。进程
(3)使用VARIANT变量把SAFEARRAY进行包装。效率
使用SAFEARRAR实现二维数组的源代码以下:变量
VARTYPE vt = VT_I4; /*数组元素的类型,long*/ SAFEARRAYBOUND sab[2]; /*用于定义数组的维数和下标的起始值*/ sab[0].cElements = 2; sab[0].lLbound = 0; sab[1].cElements = 2; sab[1].lLbound = 0; /*建立一个2*2的类型为long的二维数组*/ SAFEARRAY* psa = SafeArrayCreate(vt, sizeof(sab)/sizeof(SAFEARRAYBOUND), sab); if (NULL == psa) { throw; }
/*经过指向数组的指针来对二维数组的元素进行间接赋值*/
long (*pArray)[2] = NULL;
HRESULT hRet = SafeArrayAccessData(psa, (void **)&pArray);
if (FAILED(hRet))
{
throw;
}方法