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

Ale*_*lex 2 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])));
Run Code Online (Sandbox Code Playgroud)

我认为它的SysAllocString(BSTR((const char*)rateMaterialTypeNames [i]))位给我带来了问题.程序运行时,我收到访问冲突.

这是在i上访问rateMaterialTypeName值的正确方法吗?注意我期待像"IronOre"这样的东西作为i的值,而不是单个字符.

Bin*_*ier 5

如果您使用的是微软ATL,则可以使用CComBSTR类.它将接受一个char*并从中创建一个BSTR,同样,你不必担心删除BSTR,所有这些都发生在CComBSTR的dtor中.

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

希望这可以帮助