关于SafeArrayPutElement

时间:2012-01-10 10:53:39

标签: c unicode atlcom

仅供参考我在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

纳温

1 个答案:

答案 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);