• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++でmciSendString)

VC++でmciSendStringエラー:引数の型が違っている?

このQ&Aのポイント
  • VC++のVisual C++ 2005 Express EditionでmciSendString関数を使用中にエラーが発生しました。
  • エラーメッセージ「Run-Time Check Failure #3 - The variable 'pszReturnString' is being used without being defined.」が表示されています。
  • デバッグ時には引数の型が違っているエラー「CXX0030: エラーです: 式を評価できません」となっています。原因が分からず困っています。

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

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

mciSendString((PCTSTR)str.c_str(), pszReturnString, 125, 0);の 第二パラメータは何を渡すのかご存知でしょうか そして、関数は第二パラメータに何をしてくるのかを理解すれば どうすればよいのか分かるかと思います ポインタの扱い方が間違っていますよ ためしにNULLとしてみてください。 これだけ教えてもC++をする限りついて回る問題です ご自分で理解してみてください。

masaota56
質問者

お礼

NULLとするとエラーは出ないのですが、後々使うかも知れないので質問しました。 もう一度勉強しなおします。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

PTSTR pszReturnString;はポインタ宣言ですので mciSendString((PCTSTR)str.c_str(), pszReturnString, 125, 0); pszReturnStringを渡しても実態のある文字列格納アドレスは わたりません。

masaota56
質問者

補足

ありがとうございます。 具体的にどうすれば良いでしょうか?ポインタを戻すには*を付ければよかったと記憶しているのですが、上手くいきませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • _tcscat がうまくいきません(VC++2008)

    以下のように入力し、ビルドすると 「error C2664: 'wcscat' : 1 番目の引数を 'LPCTSTR' から 'wchar_t *' に変換できません。」となり、うまくいきません。 ダイアログに「テストです。」と表示させたいです。一体どうしたらよいのでしょうか?ご教授ください~。 環境は、WindowsXP SP2 & Visual C++ 2008 Express Edition です。 なお、文字セットは「Unicode 文字セットを使用する」に設定してあります。 //----------------------------------------------------------- #include <Windows.h> #include <tchar.h> INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE,LPSTR,INT){ LPCTSTR str1 = _T("テスト"); LPCTSTR str2 = _T("です。"); _tcscat( str1, str2 ); MessageBox(NULL,str1,_T("Dialog"),MB_OK); return 0; }

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

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

  • 空白を含む名前のファイル等を

    受け取るプログラムで ”x y.txt”が一つのファイルと見なされるようにするため yoppiiさんに GetCommandLine() を使うのをやめて __argvや__argc すればいいという事を教えてもらいいったん解決したのですが いろいろ調べてみるとまずい場合がまだあるということがわかりました Windows95のc:\My documをドラッグ実行した場合です 試験用アプリは #include <windows.h> #include <string> using namespace std; WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { string str=""; for(int i=0;i<__argc;str=str+'<'+__argv[i++]+">\n"); MessageBox(NULL,str.c_str(),"Command",MB_OK); return 0; } です 対処方法を教えてください

  • http://www.***.com/goo.htm(仮)

    のページを見るために #include <string> #include <fstream> using namespace std; WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { ofstream ofs; string html,file; file="c:\\gomi.url"; ofs.open(file.c_str()); if(ofs.is_open()) { html="[InternetShortcut]\n; html+="URL=http://www.***.com/goo.htm\n"; ofs<<html; ofs.close(); ShellExecute(NULL,"open",file.c_str(),NULL,NULL,SW_SHOWMAXIMIZED); } return 0; } としてgomi.urlにurlフォーマットのアドレスを書き込んでそれを開くことによってできますがもっと直接的にアプリで http://www.***.com/goo.htm を見る方法を教えてください

  • コンパイルエラー

    //test.cpp #include<iostream> #include<string> class test { string hoge; public: test(string str); void method() const; } 14行目  test::test(string str) : test(hoge){} void test::method() const { std::cout << "test" << std::endl; } int main() { string s; std::cout << "名前を入力してください。" << std::endl; std::cin >> s; test aaa(s); aaa.method(); } コンパイルしようとすると下記エラーになります。 エラー E2303 test.cpp 7: 型名が必要 エラー E2139 test.cpp 7: 宣言に ; がない エラー E2293 test.cpp 10: ) が必要 エラー E2147 test.cpp 14: 引数宣言は 'string' で始められない エラー E2111 test.cpp 14: ここでは型 'test' は定義できない エラー E2136 test.cpp 14: コンストラクタには戻り型は指定できない エラー E2316 test.cpp 14: 'test::test(int)' は 'test' のメンバーではない エラー E2451 test.cpp 22: 未定義のシンボル string(関数 main() ) エラー E2379 test.cpp 22: ステートメントにセミコロン(;)がない(関数 main() ) エラー E2451 test.cpp 24: 未定義のシンボル s(関数 main() ) *** 10 errors in Compile *** ■1.型名が必要 →string hoge;と宣言してる箇所でエラー発生。 …stringと宣言してるのになぜでしょうか… ■2.宣言に";"がない →string hoge;と宣言してる箇所でエラー発生。 …";"つけてるのですが… ■3.")"が必要 →test(string str);の行でエラー発生。 …")"はどこで必要なのでしょうか ■4.引数宣言はstringでははじめられない →test::test(string str) : test(hoge){}の行でエラー発生。 …C++って引数をstringで受け取れない…?どういうことでしょうか などなど疑問がいっぱいあるのですが、どこが間違っているのかよくわかりません…ご指導よろしくお願いします。

  • 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などありましたら教えていただけませんか。

  • C++のファイルに対する配列データの読み書き

    C++で配列c[0],c[1],....の値をファイルに出力すると、 1.2 3.2 5.1 8.2 -9.1 のようになると思います(この例は配列のサイズが5)。実際は100以上の配列にします。 プログラム的にはだいたい下のようになると思っています。 std::ofstream ofs( "test.txt" ); ofs << ここで並びの出力をするはず? << std::endl; 意味は、出力ファイルの定義とストリームによる書き出し?と改行だと思います。 並びの出力ですから、ループでよいのでしょうか。プログラム作法が分からないので教えて頂きたいのですが。データの区切りは空白で、できれば書く数値のフォーマットは揃えたいですが。 次に、読み込むときはどうなるでしょうか。 std::ifstream ifs( "test.txt" ); std::string str; ifs >> str; std::cout << str << std::endl; これだと読んだデータを画面表示して終わりです。配列に読み込む方法なのですが。 よろしくお願いします。

  • VC++のエラー

    windows xp VC++ 6.0 http://www.kumei.ne.jp/c_lang/intro/no_57.htm に書いてある通りに、タイプをwin32 Application で 設定して、 #include <windows.h> int WINAPI WinMain( HANDLE hInstance , HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL, (LPCSTR)"メッセージ・ボックスのテストです。", (LPCSTR)"猫でもわかるプログラミング", MB_OK); return 0; } をプロジェクトに追加し、ビルドすると、 ******************************** --------------------構成: aaadf - Win32 Debug-------------------- コンパイル中... fdfdfdf.cpp D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: 'WinMain' : 関数はオーバーロードできません。 D:\VC\aaadf\fdfdfdf.cpp(5) : 'WinMain' の宣言を確認してください。 cl.exe の実行エラー fdfdfdf.obj - エラー 1、警告 0 ********************************* とエラーになります。 何がいけないのかさっぱりわかりません。。

  • VC++でファイルへの書き込みについて

    VC++にて、ファイルへの書き込みを行っているのですが、どうもうまくいきません。 Form.h //ファイル->開く private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { //開くダイアログ表示 OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "CSV形式(*.csv)|*.csv|すべてのファイル(*.*)|*.*"; if (dlg -> ShowDialog() != System::Windows::Forms::DialogResult::OK){ return; } //CSV形式でファイルを読み込み LoadCsvFile( dlg -> FileName ); } //ファイルの読み込み private: bool LoadCsvFile( String^ path ){ //ファイルをオープン StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); //ファイル読み込み String^ data; data = reader -> ReadLine(); st = from_cli(data); //dataをグローバル変数std::string = stに変換 reader -> Close(); return true; } //System::String -> std::string変換用 std::string from_cli(String^ input, Encoding^ encoding) { array<Byte>^ result = Encoding::Convert(Encoding::Unicode, encoding, Encoding::Unicode->GetBytes(input)); if ( result->Length != 0 ) { pin_ptr<unsigned char> pin = &result[0]; return std::string(reinterpret_cast<char*>(pin), result->Length); } return std::string(); } //ボタンクリックイベント private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { std::ofstream ofs; ofs.open( "test.txt" ); ofs << st << std::endl; ……(1) ofs.close(); } csvファイルを読み込み後、ボタンクリックイベントを行ってもtext.txtの内容が書き変わりません。 (1)の部分をofs << "test" << std::endl;に変更したり、 button1_Click内で変数st2を宣言し、 ofs << st2 << std::endl;に変更すると、問題無くファイルへの書き出しが行えます。 文字コード等が関わっているのでしょうか? 御助言の程、よろしくお願いします。

  • STLのstringのサイズが0なのに、printfできちゃうのはなぜ

    STLのstringのサイズが0なのに、printfできちゃうのはなぜ? たとえば、以下のような小文字変換処理を考えます。 std::string str = "ABC"; std::string strTmp = ""; std::transform( str.begin(), str.end(), strTmp.begin(), ptr_fun(::tolower) ); この時、strTmpには"abc"が入っていると思っていたのですが、 strTmp.compare("abc") が0になりませんでした。strTmp.size()が0になっており、どうも空文字""と認識されているようです。 ですが、 printf( strTmp.c_str() ); とすると、"abc"と出力されます。printfで上記のようにデバッグしていたので、なかなかミスが発見できなかったのですが、strTmpの初期化で""を入れているために、compareがうまく動かなかったようです。 std::string strTmp = ""; のところを std::string strTmp = str ; と直すと、compareが期待通りに動きました。 長くなってすみませんが、ここからが質問です。 1.stringの初期化時に確保した文字列長は、その後変更できないのでしょうか?今まで、普通に""で初期化した後、別の文字列を代入したりしていたような気がするのですが…。 2.strTmpのサイズが0にもかかわらず、printfで(一見)期待通りの結果が出力されたのは、なぜでしょうか?printfは、ヌル文字までを出力する仕様みたいですが、そもそもstringのsize()も、ヌル文字までの長さを返すのではなかったでしょうか。 全ソースは、以下の通りです。 #include <string> #include <algorithm> #include <functional> #include <ctype.h> #include <stdio.h> int main() {  std::string str = "ABC";  std::string strTmp = ""; // strにすると動く  std::transform( str.begin(), str.end(), strTmp.begin(), std::ptr_fun(::tolower) );  printf( "compare = %d\n", strTmp.compare("abc") );  printf( "size = %d\n", (int)strTmp.size() );  printf( "strTmp = %s\n", strTmp.c_str() );  return 0; }