我是一个用 C++ 应用程序使用的 ATL 编写的 COM 对象,我想在两者之间传递 BYTE 数组。到目前为止,我对 COM/IDL 的体验仅限于传递简单类型(BSTR、LONG 等)。
是否有相对简单的方法让 COM 对象将数组传递给调用者?例如,我想传递原始图像 (TIFF) 而不是弄乱临时文件。
最佳答案
尝试将 safearray 变体传递给 COM 对象。像这样将 BYTE 数组放入 safearray 变体中....
bool ArrayToVariant(CArray<BYTE, BYTE>& array, VARIANT& vtResult)
{
SAFEARRAY FAR* psarray;
SAFEARRAYBOUND sabounds[1];
sabounds[0].lLbound=0;
sabounds[0].cElements = (ULONG)array.GetSize();
long nLbound;
psarray = SafeArrayCreate(VT_UI1, 1, sabounds);
if(psarray == NULL)
return false;
for(nLbound = 0; nLbound < (long)sabounds[0].cElements ; nLbound++){
if(FAILED(SafeArrayPutElement(psarray, &nLbound, &array[nLbound]))){
SafeArrayDestroy(psarray);
return false;
}
}
VariantFree(vtResult);
vtResult.vt = VT_ARRAY|VT_UI1;
vtResult.parray = psarray;
return true;
}
关于c++ - 使用 COM 传递数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/295067/