我正在编写一个由外部程序调用的 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/