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;
}方法