我正在编写一个由外部程序调用的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的值,而不是单个字符.
如果您使用的是微软ATL,则可以使用CComBSTR类.它将接受一个char*并从中创建一个BSTR,同样,你不必担心删除BSTR,所有这些都发生在CComBSTR的dtor中.
另外,请参阅Matthew Xaviers的回答,看起来你并没有正确地将你的数组字符串传递给该函数.
希望这可以帮助