c++ - 将 C 类型字符串数组中的元素作为 BSTR 传递给 COM 对象? (在 C++ 中)

标签 c++ c com bstr

我正在编写一个由外部程序调用的 C++ DLL。

1.) 我将字符串数组(如 char *var)作为该程序的参数。

2.) 我想遍历这个数组并对字符串数组的每个元素调用一个 COM 函数。 COM 函数必须采用 BSTR:

DLL_EXPORT(void) runUnitModel(char *rateMaterialTypeNames) {

    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    IUnitModelPtr pIUnit(__uuidof(BlastFurnaceUnitModel));

    pIUnit->initialiseUnitModel();

    int i;
    for(i=0; i < sizeOfPortRatesArray; i++)
            pIUnit->createPort(SysAllocString(BSTR((const char *)rateMaterialTypeNames[i])));

我认为是 SysAllocString(BSTR((const char *)rateMaterialTypeNames[i])) 位给我带来了问题。程序运行时出现访问冲突。

这是访问 i 处 rateMaterialTypeName 值的正确方法吗?请注意,我期望像“IronOre”这样的值作为 i 的值,而不是单个字符。

最佳答案

如果您使用的是 Microsoft 的 ATL,则可以使用 CComBSTR类(class)。 它将接受一个 char* 并从中创建一个 BSTR,此外,您无需担心删除 BSTR,所有这些都发生在 CComBSTR 的 dtor 中。

另请参阅 Matthew Xaviers回答,看起来您没有正确地将字符串数组传递给该函数。

希望对你有帮助

关于c++ - 将 C 类型字符串数组中的元素作为 BSTR 传递给 COM 对象? (在 C++ 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586734/

相关文章:

c - 矩形相交算法

c# - COM+ 远程处理错误代码 8000401a 因为身份选项卡下此用户的密码正在重置

c++ - 在 C++ 中托管 Silverlight

c++ - 无法运行在 Qt Creator 中创建的程序?

c++ - 循环无限时的输入验证

c - 在 C 中初始化动态 union 数组

java - `malloc` 和 `free` Java NDK Wrap 是克服 Android 自动回收的唯一方法吗?

c++ - 使用 easylogging++ 记录 QString 时插入的额外空间

c++ - : No module named _hdfs_*

c# - 将 Qt GUI 代码集成到 C# 中