0

仅供参考,我是 COM\ATL 和 unicode 的初学者

SafeArrayPutElement(safearray*,LONG,void*)在我的代码中使用,问题是......

在这里,当我将第三个参数设为L"ItWorks" ie时,该函数工作正常

SafeArrayPutElement(safearray*,LONG, L"ItWorks");

但如果我使用

wchar_t str;
str = 'a';
SafeArrayPutElement(safearray*,LONG,&str);

这个功能失败了E_OUTOFMEMORY

这里我需要的是,我有一个char*变量中的字符串,我需要如何将它用作上述函数的第三个参数。任何人都可以在这方面帮助我。

TIA

纳文

4

1 回答 1

2

唯一可以在 COM 中安全使用的字符串类型,而BSTR不是原始的wchar_t*。这是因为 aBSTR包含 COM 用于编组目的的额外内部数据。使用SysAllocString()or从 aSysAllocStringLen()分配一个新的,然后在你用完后使用它来释放它,例如:BSTRwchar_t*SysFreeString()

BSTR bstr = SysAllocString(L"ItWorks");
SafeArrayPutElement(..., bstr);
SysFreeString(bstr);

.

wchar_t str = L'a'; 
BSTR bstr = SysAllocStringLen(&str, 1);
SafeArrayPutElement(..., bstr);
SysFreeString(bstr); 
于 2012-01-10T17:46:14.437 回答