関数にLPWSTRするのstd ::文字列を変換置くことができませんCListCtrl
でLVITEM::pszText
、AfxMessageBox
のようないくつかのMFCオブジェクトのプロパティを使用するLPWSTR
に、...だから私は、インターネットからこのsnipsetを使用します。MFC:私は</p> <p><br/>私は<code>std::string</code>から変換する必要がある「使用Unicode文字セット」には、Visual Studioの2015年、文字セットの設定によってMFCプロジェクトを書いて
String str = "Hello world!";
std::wstring wname(str.begin(), str.end());
LPWSTR lStr = const_cast<wchar_t*>(wname.c_str());
MessageBox(lStr);
このアプローチの作業罰金。しかし、問題は、すべての時間が私はこれらの文を書き直す必要があります変換する必要があり、私は関数にこのsnipsetを置くことである:
LPWSTR convertLPWSTR(std::string &str) {
std::wstring wname(str.begin(), str.end());
return const_cast<wchar_t*>(wname.c_str());
}
/...
String str = "Hello world!";
LPWSTR lStr = convertLPWSTR(str);
MessageBox(lStr);
しかし、メッセージボックスの出力(エラーフォントのような)エラー文字列
:
これを修正する方法を知っている人はいますか?ありがとう!
を使用していない私はあなたの実装に[リンク](http://stackoverflow.com/a/27296/6460438) – Greg
いくつかの注意事項を使用することをお勧めします: '1'それを単純にデータ型を広げて(文字**のエンコーディング**を完全に無視して)狭い文字列からワイド文字列を構築するという習慣は殺すのが難しいようです。それをやめてください。あなたが期待したとおりに動作しません。 '2'あなたの' convertLPWSTR'実装はローカルオブジェクトへのポインタを返します。それは未定義の動作です。 '3''解答は簡単です:' MessageBox(CString(str.c_str())); ' – IInspectable
' wstring'、 'LPWSTR'、' c_str'は何ですか、試行錯誤してプログラミングしていますか? – immibis