3

以下は私が試したもので、うまくいきませんでした。

std::wstring = L"Text";
USES_CONVERSION;
LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_str());

より良い方法は何ですか?

4

2 に答える 2

8

LPOLESTROLECHARは本質的に である文字列ですwchar_t。nullLPOLESTRで終わる も同様wchar_t*です。LPOLESTRは、typedefマイクロソフトによって作成されました。これらは、Microsoft が MFC 4.0 より前に使用し、その後放棄した自動 ANSI/Unicode 変換スキームの痕跡です。Win32 開発の場合、「OLE」は Unicode に対応します。たとえば、Win32 開発では、anOLECHARは単なる awchar_tであり、anLPOLESTRはワイド文字列 (例: wchar_t*) です。

wstring文字の配列から構築wchar_tするのは簡単です-

wchar_t* Array = L"Hello";
std::wstring strArray(Array);

他の方向を wstring から wchar_t* に変換するには、これを行うことができます -

wstring wstr = L"Test wstring";
const wchar_t *pwstr = wstr.c_str();

これを試すこともできます。

LPOLESTR tempString = W2OLE((wchar_t*)wstring_temp.c_str());
于 2011-07-13T16:54:16.780 に答える
1

文字列をコピーするだけで、変換はまったく必要ありません。

std::wstring str = L"Text";
LPOLESTR lpDesc = (LPOLESTR) new wchar_t[str.length() + 1];
strcpy(lpDesc, str.c_str());
delete[] lpDesc;
于 2011-07-13T16:49:24.253 に答える