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

标签 c++ com

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

相关文章:

c++ - 如何在qt中获取QModelIndexList中的值?

c++ - 对象指针的 priority_queue 上的运算符重载

c# - 将 c# 匿名类对象公开给 COM (JavaScript)

multithreading - 在 Delphi 线程中使用 CoInitialize

php - 在 Office 2010 (Excel.Application) 中使用 PHP 的 COM 对象

c++ - Boost 安装和库路径

c++ - qt3d 窗口内的 Qt Widget

c++ - 从一个不再存在的函数创建的 lambda 的内部框架修改 via 闭包中的变量是否安全

com - AHK COM 保存时通过文件路径传递变量

go - 调用 WMI 类的方法