- ベストアンサー
waveout関数を使うと「○○は一度も使用されない」と表示されるのはなぜですか?
C++をはじめたばかりなのですが、waveout関数に興味を持ち、今現在勉強中です。 初めに、仕組みを大まかにでも理解するために、サンプルを貼り付け、コンパイルし、実行してみました。 サンプルは、『Windowsプログラミング研究所(http://www13.plala.or.jp/kymats/index.html)』で公開されているものを使いました。公開されているページのURLは、http://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_stereo_16.cppです。 コンパイルに利用したのは、「CPad for Borland C++ Compiler」です。 ところが、以下のようなエラーが表示されました。 >警告 W8057 bb.cpp 44: パラメータ 'hinstPrev' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) >警告 W8057 bb.cpp 44: パラメータ 'lpszCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) >Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland >Fatal: ファイル WINMM.LIB が開けません プログラミングの基礎が成っていないためなのでしょうが、「パラメータ 'hinstPrev' は一度も使用されない」や「パラメータ 'lpszCmdLine' は一度も使用されない」の意味がわかりませんでした。 サンプルが間違っているとは思えません。 となると、このサンプルを実行に移すための下準備が必要なのだと思うのですが、それが何なのかがわかりません。 waveout関数について説明されている他のサイトも検索してみたのですが、上のページで公開されているサンプルと同様の内容が公開されているばかりで、実行に移すための下準備が何なのかはわかりませんでした。 なぜ「○○は一度も使用されない」と表示されるのかを教えてください。 また、これを改善するには何が必要になるのかについても、ご教授ください。 できれば、waveout関数について、上に挙げたサイトよりも、より初心者向けに書かれたサイトがあれば、教えてもらえると幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
補足した方いいように感じましたので,とりあえず仮引数だけは参照して下さい。 Tacosanさんの解決案がスマートですね。どうもC言語よりな回答になっていました。 とりあえず,解決案をとりまとめます。 ■変数を使用し解決(C/C++共通) int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; → int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow; ■仮引数による解決(C++)★★ int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) →次のようになります。(hInstanceは関数内で使用しているのでそれ以外は省略) int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, PSTR, int ) ■特に気にしない 原因が特定している警告なので,気にしない。警告が出ていてもコンパイルおよびリンクは通るので実行には問題ありません。 特にサンプルソースなので極力修正はしなくてもいいと考えます,一から作るのであれば,警告0件を目指すべきです。 ◇BCCの設定の参考になるサイト ・Borland C++ Compilerで参考になるサイトは次のサイトから「BCCでプログラムを作ろう」のリンク先を参照 http://www.kumei.ne.jp/c_lang/index.html
その他の回答 (3)
- goosyu
- ベストアンサー率58% (36/62)
他にもお解決策があるかもしれませんがつぎのように修正すると解決できます。 #pragma comment(lib,"winmm") → #pragma comment(lib,"winmm.lib") あと、「_mainが未解決」とlinkエラーが出た場合,CPad for Borland C++ の「実行(R)」-「設定(S)」で「実行」のタグを選び,コンパイル時パラメータの欄に「-W」を追加します。これでmain()のかわりにWinMain()が使用されるようになります。 最後にWinMain()が未解決とエラーが出た場合は,WinMain()の引数をもとに戻しておいて下さい。
- Tacosan
- ベストアンサー率23% (3656/15482)
警告だけ: C++ では「仮引数に名前を付けない」ことができます.
補足
まだプログラミングを始めたばかりで見当違いな解釈になっているかもしれませんが、 60行目・61行目の int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) の部分を int WINAPI WinMain( HINSTANCE hInstance) に変えてみたところ、エラーの表示がなくなりました。 「仮引数に名前を付けない」というのは、こういうことなのでしょうか?
- goosyu
- ベストアンサー率58% (36/62)
>警告 W8057 bb.cpp 44: パラメータ 'hinstPrev' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) →この警告は,'hinstPrev' はWinMain()関数の引数として定義されたが一度も関数内でこの'hinstPrev'変数への参照または書き込みが行われていないという指摘です。本来は不要な変数を指摘してくれる警告なのですが,今回のように予め定義されている関数の引数については,無視しても問題ありません。 もし警告を消したいのであれば,「MSG msg;」の次に「(void)hinstPrev;」と記述を追加すると警告から外れるはずです。他にも警告回避方法があると思いますので検討して下さい。 あと「WINMM.LIB」が開けないのはLIBのパスが通っていないと考えます。 「CPad for Borland C++ Compiler」のツールから設定ファイルilink32.cfgを編集を選び,次のように編集してください。 ■修正前 -L"C:\borland\bcc55\Lib" ■修正後 -L"C:\borland\bcc55\Lib;C:\borland\bcc55\Lib\PSDK" 尚,修正前が質問者と環境が違う場合は,修正前と修正後の差を考えて環境に合わせて下さい。
補足
ご指摘どおりに修正したところ、 エラー文が 「WINMM.LIBが開けない」から、 「WINMM.OBJが開けない」に変わりました。 実行してもファイルが見つかりませんとなります。 また、上のTacosan氏のご指摘を受けて、 上のように変更してみた結果、 「○○は一度も使用されない」というエラーはなくなりましたが、 「WINMM.OBJが開けない」のエラー表示は残りました。 ファイルを調べてみたところ、WINMM.LIBはPSDKのフォルダにあったのですが、WINMM.OBJはありませんでした。このファイルはどのように手に入れればよいのでしょうか?
お礼
ありがとうございました。まとめを参考にしたところ、無事解決できました。