2011-07-13 37 views
2

以下は私が試したもので、動作しませんでした。wstringをLPOLESTRに変換するには?

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

いずれかの良い方法は何ですか?

+0

ちょうど気づいたが、std :: wstring = L "テキスト";有効じゃない。変数名はどこですか? –

答えて

1

あなただけの文字列をコピーし、まったくの変換を必要としない:

std::wstring str = L"Text"; 
LPOLESTR lpDesc = (LPOLESTR) new wchar_t[str.length() + 1]; 
strcpy(lpDesc, str.c_str()); 
delete[] lpDesc; 
+0

エラーC2440: '=': 'const wchar_t *'から 'LPOLESTR'に変換できません – Naveen

+0

エラーC2440: '=': 'const wchar_t *'から 'LPOLESTR'に変換できません。だから – Naveen

+0

@Naveen:今すぐお試しください。 – orlp

7

LPOLESTRは、本質的にwchar_tあるOLECHARの文字列です。したがって、LPOLESTRはNULLで終了しますwchar_t*です。 LPOLESTRは、Microsoftによって作成されたtypedefです。これらは、MicrosoftがMFC 4.0より前に使用し、その後放棄した自動ANSI/Unicode変換スキームの痕跡です。 Win32開発では、 "OLE"はUnicodeに対応しています。たとえば、Win32開発では、OLECHARは単にwchar_tであり、LPOLESTRはワイド文字列です(例:wchar_t*)。それは単純ですwchar_t文字の配列からwstringを構築するために

- wchar_tにwstringのから他の方向を変換する

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

*、あなたがこれを行うことができます -

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

することができますこれも試してみてください。

LPOLESTR tempString = W2OLE((wchar_t*)wstring_temp.c_str()); 
+0

LPOLESTRは 'const wchar_t *'ではなく 'wchar_t *'なので、 'pwstr = wstr.c_str()'はキャストなしでは不正ですが、それは不快な質問をします:constでなければそれを行うには安全ですか? –

関連する問題