仅供参考我在COM \ ATL和unicode
中打招呼我在代码中使用SafeArrayPutElement(safearray*,LONG,void*)
,问题是......
这里,当我将第三个参数设为L"ItWorks"
时,该函数正常工作
即
SafeArrayPutElement(safearray*,LONG, L"ItWorks");
但如果我使用
wchar_t str;
str = 'a';
SafeArrayPutElement(safearray*,LONG,&str);
此功能无法说E_OUTOFMEMORY
这里我需要的是,我在char*
变量中有一个字符串,有些我需要使用它作为上述函数的THIRD参数。
在这方面,有谁可以帮助我。
TIA
纳温
答案 0 :(得分:2)
BSTR
中唯一可在COM中使用的字符串类型,而不是原始wchar_t*
。这是因为BSTR
包含COM用于编组目的的额外内部数据。使用SysAllocString()
或SysAllocStringLen()
从BSTR
分配新的wchar_t*
,然后在使用完毕后使用SysFreeString()
将其释放,例如:< / p>
BSTR bstr = SysAllocString(L"ItWorks");
SafeArrayPutElement(..., bstr);
SysFreeString(bstr);
wchar_t str = L'a';
BSTR bstr = SysAllocStringLen(&str, 1);
SafeArrayPutElement(..., bstr);
SysFreeString(bstr);