VC++ std::stringからLPCWSTRに変換する方法

このQ&Aのポイント
  • Visual C++ 2008を使用してTextBoxからの値(System::String)をmciSendString(LPCWSTR)に渡す方法を知りたい。
  • System::Stringをstd::stringに変換してから渡そうと思っているが、エラーが出てしまう。
  • C++初心者で、変換方法についての指南をお願いしたい。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
回答No.1

>そこで自分は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
galdo530
質問者

お礼

この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); で解決です ありがとうございました。

関連するQ&A

  • Visual C++ 2008 Express EditionでCString

    Visual C++ 2008 Express Editionでは、CStringを使用できない のでしょうか? 使用できないのであれば、CStringを引数に している関数は全て使用不能ということですか? 試しにstringにしてみましたが以下のエラーになりました。 'std::string' から 'LPCWSTR' に変換できません。

  • unsigned char SJis[2]からstd::stringに変換

    開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

  • 数値を std::string に変換

    C++で 数値を std::string に変換 する方法はあるのでしょうか? << や += などやってみましたができませんでした。 やはりC同様に snprintf() などを使うしかないのでしょうか?

  • キャストの仕方(std::stringをconst char*へ)を教えてください。

    c++で作成したものをコンパイルしたところ、 下記のようなエラーメッセージが表示されました。 cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*) 自分の解釈では、 stat関数の第1引数がconst char*なのに、 プログラムの中では  #include <sys/types.h>  #include <sys/stat.h>  using namespace std;   :  string aaa;   :  struct stat st;  if(stat(aaa,&st)!=-1){・・・   : という感じで記述しているので、 型が変換できない という感じのことを言っているのかなぁ・・・? と思っているのですが、間違いですか? また、間違えていないとしたら・・・、 このstringで宣言しているaaaをchar*(?)にキャストする方法 と言いますか、このエラーを解決する方法を教えてください。 毎度のことですが、理解不十分で、質問の意味が通じにくいかも しれませんが、どうか宜しくお願いいたします。m(_ _)m

  • C++型変換について

    C++を始めたばかりの初心者です VBからstringの引数をもらって C++のdllで処理をしてstringを返すものを考えています dll内で処理をするのにstd::stringに変換したいのですが 変換ほうほうがわかりません charをstd::stringへ std::stringをcharへの変換方法を教えてください 宜しくお願いします。

  • VC++  System::Stringに変換するには?

    現在VisualC++ ExpressEditionを使って、C++の勉強をしながら万年カレンダーを作ろうとしていています。 ひとまずカレンダーの表示に使う月・日・曜日をDateTime::Nowから取り出したいのですが、 DateTime d1 = DateTime::Now.AddMonths; label1->Text = d1.ToShortTimeString; と試しにlabelに現在の月を表示させようとしたところ、 「1 番目の引数を 'System::String ^(__clrcall System::DateTime::* )(void)' から 'System::String ^' に変換できません。」 というエラーメッセージとともに弾かれてしまいます。 どこをどう変えればよいのか教えてください。 勉強を始めるのに買ってきた参考書では、DateTime::Now.ToLongTimeString;で日付から時刻まで繋げて表示する方法しか載っていませんでした(索引にもDateTime::Nowのみ) PCで検索しようとしても別の言語や参考書のHPが大量に引っかかって困っています。

  • VC++でmciSendString

    Visual C++ 2005 Express Editionで以下のコードを書くと Run-Time Check Failure #3 - The variable 'pszReturnString' is being used without being defined. ハンドルされていない例外が発生しました: 0xC0000005: 場所 0xcccccccc に書き込み中にアクセス違反が発生しました。 と出ます。 デバッグ時lpstReturnStringの部分には CXX0030: エラーです: 式を評価できません となっています。引数の型が違っているのでしょうか?原因が分からず困っています・・・。 ----------------- ~クラス宣言(省略)~ Music::Music(std::string fn) : FileName(fn){} PTSTR Music::play() { PTSTR pszReturnString; std::string str = "open " + FileName + " test"; mciSendString((PCTSTR)str.c_str(), pszReturnString, 125, 0); return pszReturnString; } int WINAPI WinMain(・・・) { std::string str = "C:\\test.mp3"; Music test(str); test.play(); }

  • System.String.Splitでエラー

    下記のようなSystem.String.Splitメソッドを使ったプログラムでエラーが出たのですが、解決方法がわかりません。 2番目の引数なしでも実行はできるのですが、分割した文字列が空の場合は省きたいので2番目の引数は省略したくありません。 なにか気づく方がいましたら、お教えください。 Visual C++ 2010を使っています。 他に環境についてなど補足が必要なことがありましたら言ってください。 using namespace System; int main(){ String^ s = "単語1 単語2 単語3 "; array<String^>^ result = s->Split(' ', StringSplitOptions::RemoveEmptyEntries); } error C2664: 'cli::array<Type> ^System::String::Split(...cli::array<wchar_t,dimension> ^)' : 2 番目の引数を 'System::StringSplitOptions' から 'wchar_t' に変換できません。(新しい機能 ; ヘルプを参照)

  • C++.NET の String型の使い方

    初めて質問いたします。 C++ .NET 2005 Express Beta版を入手し、Windows Formsのプログラミングを勉強してます。 TextBoxのTextに値を変数で指定したいのですがどうすれば良いのかわかりません。   textBox1->Text = "Test"; とダイレクトに値を指定すればできるのですが、   #include <string>   using namespace std;    (省略)   string str = "Test";   textBox1->Text = str; は、エラーになってしまいます。 C++標準のstringクラスではなく、.NETはStringクラスがあるようですが、これの使い方がMSDN等で調べているのですが分かりません。 分かりやすいURLなどありましたら教えていただけませんか。

  • VC++2005 型変換

    テキストファイルを開いて、そのファイルの中身をfgetsで読みながらそれを何回か繰り返すというようなことをするというプログラムを書いてます。プログラムは下になります。 int m; FILE* pFile; char buffer[128]; pFile=fopen("p1.txt","r"); pFile=textBox1->Text; if (pFile==NULL) { label1->Text="ファイルがありません。\n"; } for(m=1; m<=8; m++) { fgets(buffer,128,pFile); String^ buffer; buffer=textBox2->Text; } } デバックを行うと次のエラーが出てしまいます。 error C2440: '=' : 'System::String ^' から 'FILE *' に変換できません。 どのように直せばよいのでしょうか?