1. 将数组打包到VARIANT变量里 HRESULT CXXX::pack(VARIANT *pVariant, long pArgs[], long lCount) { long i; HRESULT hr; VARIANT var; SAFEARRAY* pArray; hr = S_OK; pArray = SafeArrayCreateVector(VT_VARIANT, 0, lCount); if (pArray == NULL){ return -1; } VariantInit(&var); var.vt = VT_I4; //如果是字符串数据, 以下转变其数据类型 //::VariantChangeType(&var, &var, 0, VT_BSTR); //转变后对相应的参数赋值, var.bstrVal for(i = 0; i < lCount; i++) { var.lVal = pArgs[i]; hr = SafeArrayPutElement(pArray, &i, &var); if (FAILED(hr)) { SafeArrayDestroy( pArray ); return -1; } } VariantInit(pVariant); VariantClear(&var); pVariant->vt = VT_ARRAY | VT_VARIANT; pVariant->parray = pArray; return 0; } 2. 对为数组类型的VARIANT变量进行解包 // 解包Variant HRESULT CXXX::unpack(VARIANT *pVariant, long pArgs[], long lCount) { long i; HRESULT hr; VARTYPE vt; VARIANT var; SAFEARRAY* pArray; i = 0; hr = S_OK; if (pVariant != NULL) { vt = pVariant->vt; pArray = vt & VT_BYREF?*pVariant-> pparray: pVariant-> parray; switch (vt & (VT_I4 | VT_VARIANT)) { case VT_VARIANT: { VariantInit(&var); for (i = 0; i < lCount; i++) { hr = ::SafeArrayGetElement(pArray, &i, &var); if (FAILED(hr)){ VariantClear(&var); return -1; } hr = ::VariantChangeType(&var, &var, 0, VT_I4); if (FAILED(hr)){ VariantClear(&var); return -1; } pArgs[i] = var.lVal; } VariantClear(&var); break; } case VT_I4: { for (i = 0; i < lCount; i++) { hr = ::SafeArrayGetElement(pArray, &i, &pArgs[i]); if (FAILED(hr)){ return -1; } break; } } } } return hr; }