こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++ std::stringからLPCWSTRに変換

Visual C++ 2008を使用してTextBoxからの値(System::String)をmciSendString(LPCWSTR)に渡したいと思っています。
そこで自分はSystem::Stringをstd::stringに変換しそれから渡そうと思っているのですが・・・
『error C2664: 'mciSendStringW' : 1 番目の引数を 'std::string' から 'LPCWSTR' に変換できません。』
のようにエラーが出ます。
当然そのまま与えてるので出るのは当たり前なのですが、キャストや変換の仕方が分からず調べ様にも困っている次第です。
C++に今回始めての挑戦で、右も左も分からないのですが、もしよろしければご指南頂けませんでしょうか?

投稿日時 - 2008-06-03 12:36:09

QNo.4071860

困ってます

質問者が選んだベストアンサー

>そこで自分はSystem::Stringをstd::stringに変換しそれから渡そうと思っているのですが・・・
これは不要でしょう。
(std::stringはShift_JISコードの文字列を保持している。
System::StringはUnicodeの文字列を保持している。
LPCWSTRはUnicodeの文字列用の変数。
Unicode→Shift_JIS→Unicodeでは無駄が多いし、情報が落ちる可能性がある。)

vcclr.hのPtrToStringCharsを使えばSystem::Stringから簡単に取得できるでしょう。

System::String^ s = L"ほげ";
pin_ptr<const wchar_t> p = PtrToStringChars(s);

どうしてもstd::stringからならMultiByteToWideChar関数とかmbstowcsあたろりでしょうか。

参考URL:http://msdn.microsoft.com/ja-jp/library/d1ae6tz5(VS.80).aspx

投稿日時 - 2008-06-03 12:48:11

お礼

このSystem::Stringをstd::stringに変換は
std::string cmd = "open " + fileName + " type mpegvideo alias Test";
で連結させたいがためでした。
>System::String^ s = L"ほげ";
>pin_ptr<const wchar_t> p = PtrToStringChars(s);
参考になりました。
System::String^ cmd;
cmd = L"open " + textBox1->Text + L" type mpegvideo alias Test";
pin_ptr<const wchar_t> p = PtrToStringChars(cmd);
で解決です

ありがとうございました。

投稿日時 - 2008-06-03 14:43:38

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)