gpt4 book ai didi

c++ - 使用 COM 传递数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:53 24 4
gpt4 key购买 nike

我是一个用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com