0

参考までに、私はCOM\ATLとUnicodeの初心者です

私はSafeArrayPutElement(safearray*,LONG,void*)自分のコードで使用していますが、問題は...

L"ItWorks" ここでは、3番目のパラメーターをieとして指定すると、関数は正常に機能します。

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

しかし、私が使用する場合

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

この関数は失敗しますE_OUTOFMEMORY

ここで必要なのは、char*変数に文字列があることです。これを上記の関数の3番目のパラメーターとして使用する必要があります。誰かがこの点で私を助けてくれますか?

TIA

Naveen

4

1 に答える 1

2

BSTRCOM でraw ではなくで安全に使用できる唯一の文字列型wchar_t*。これは、BSTRCOM がマーシャリングの目的で使用する追加の内部データが に含まれているためです。SysAllocString()またはを使用してからSysAllocStringLen()新しいものを割り当て、使用が終了したら を使用して解放します。例: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 に答える