• ベストアンサー

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関数について、上に挙げたサイトよりも、より初心者向けに書かれたサイトがあれば、教えてもらえると幸いです。

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

  • ベストアンサー
  • goosyu
  • ベストアンサー率58% (36/62)
回答No.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

time0space
質問者

お礼

ありがとうございました。まとめを参考にしたところ、無事解決できました。

その他の回答 (3)

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.3

他にもお解決策があるかもしれませんがつぎのように修正すると解決できます。 #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)
回答No.2

警告だけ: C++ では「仮引数に名前を付けない」ことができます.

time0space
質問者

補足

まだプログラミングを始めたばかりで見当違いな解釈になっているかもしれませんが、 60行目・61行目の int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow) の部分を int WINAPI WinMain( HINSTANCE hInstance) に変えてみたところ、エラーの表示がなくなりました。 「仮引数に名前を付けない」というのは、こういうことなのでしょうか?

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.1

>警告 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" 尚,修正前が質問者と環境が違う場合は,修正前と修正後の差を考えて環境に合わせて下さい。

time0space
質問者

補足

ご指摘どおりに修正したところ、 エラー文が 「WINMM.LIBが開けない」から、 「WINMM.OBJが開けない」に変わりました。 実行してもファイルが見つかりませんとなります。 また、上のTacosan氏のご指摘を受けて、 上のように変更してみた結果、 「○○は一度も使用されない」というエラーはなくなりましたが、 「WINMM.OBJが開けない」のエラー表示は残りました。 ファイルを調べてみたところ、WINMM.LIBはPSDKのフォルダにあったのですが、WINMM.OBJはありませんでした。このファイルはどのように手に入れればよいのでしょうか?

関連するQ&A

  • WinMainの第3引数のlpszCPを・・・

    WinMainの第3引数のlpszCPを使うのをやめたとたんに Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 警告 W8057 program.cpp 335: パラメータ 'lpszCP' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland という警告が出始めたのですが普通lpszCPは使わないものなのではないでしょうか? 警告を回避するにはどうしたらいいでしょうか?

  • Visual Windows for BC++ のサンプルプログラムがエラーになる

    Visual Windows for BC++ をインストールした直後に、新しいプロジェクトをwindows型でつくり、サンプルプログラムをビルドしたところ、うまく実行ファイルができ、正常に動作しました。 次に、OpenCVを http://nautilus.cs.miyazaki-u.ac.jp/~yoshi/pukiwiki/index.php を参考にダウンロードして、 インクルードファイルの検索パスに3つ: C:\Program Files\OpenCV\cv\include、C:\Program Files\OpenCV\cxcore\include、C:\Program Files\OpenCV\otherlibs\highgui ライブラリファイルの検索パスに1つ:C:\Program Files\OpenCV\lib を追加しました。 OpenCVのサンプルプログラムをビルドしようとしたのですがエラーになり先に進みません。それどころか、インストール直後にビルドできたサンプルプログラムもエラーが出るようになってしまいました。 エラーが発生したため、brc32.exe を終了します。 となります。 コンパイルも、以下の警告が出るようになってしまいました。 私の設定が悪いのでしょうか、それとも、Visual Windows for BC++では、OpenCVは扱えない ということでしょうか? よろしくお願いします。 Visual Windows for BC++, Copyright (c) 2003-2007 M. Yasue: proj1.exe ビルド実行中..... Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ..\hello.cpp: 警告 W8060 ..\hello.cpp 30: おそらく不正な代入(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'hPrevInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'message' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'wParam' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8004 ..\hello.cpp 130: 'wmEvent' に代入した値は使われていない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 183: パラメータ 'lParam' は一度も使用されない(関数 __stdcall About(HWND__ *,unsigned int,unsigned int,long) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland リソースファイルコンパイル・リンク実行中..... Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. 終了.....

  • DxLibについて質問です

    DxLibを使ったプログラムがコンパイルできません。 下がそのプログラムです #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) { return -1; } DrawBox(100,100,300,300,GetColor(255,255,255),TRUE); WaitKey(); DxLib_End(); return 0; } http://p.booklog.jp/book/46490/chapter/77396 このサイトに従って、DXライブラリを使うセットアップをしたのですが、 下のようなエラーコードが出てきます。 ■C:\Users\masaki\Desktop\C> bcc32 windows.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland windows.cpp: 警告 W8022 C:\borland\bcc55\Include\DxDirectX.h 6121: 'D_CTransInPlaceFilter::Transform(D_IMediaSample *)' が仮想関数 'D_CTransformFilter::Transform(D_IMediaSample *,D_IMediaSample *)' を隠蔽する 警告 W8094 C:\borland\bcc55\Include\DxLib.h 100: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8094 C:\borland\bcc55\Include\DxLib.h 101: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8094 C:\borland\bcc55\Include\DxLib.h 102: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8057 windows.cpp 13: パラメータ 'hInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'hPrevInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'nCmdShow' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: ファイル SHELL32.LIB が開けません shell32.libが開けないとあり、自分でも調べたのですが、自分にはその内容が理解できず、このサイトに質問を投稿しました。 コンパイラは、Borland C++ Compiler 5.5.1 OSは、Windows 7 Ultimate エディタは、CPad for Borland C++ Compiler ver.2.3.1 です。 よろしくお願いします。

  • 初めてのWindowsプログラム

    初めてのWindowsプログラム #include <windows.h> #include <stdio.h> char* Title ="加算プログラム"; int AddNum(int a,int b) { return a +b; } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hDummy,LPSTR lpszArgs, int iMode) { int i; char s[80]; i = AAddNum(123, 456); sprintf(s, "123+456=%d",i); MessageBox(NULL,s,Title,MB_OK); return 0; } このプログラムなんですが、実行すると次のようなエラーが出ます。 ■C: C> bcc32 test.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: 警告 W8065 test.c 16: プロトタイプ宣言のない関数 'AAddNum' の呼び出し(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hInst' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hDummy' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'lpszArgs' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'iMode' は一度も使用されない(関数 WinMain ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) コンパイラはBorland C++ 5.5.を使っていて、printfなどのコンソールプログラムは実行できます。 サンプルプログラムそのままなのですが、なぜ上のプログラムは実行できないのでしょうか。

  • lstrcpyが使えない

    #include <dshow.h> としてlstrcpyを加えたコードを bcc32でコンパイルするとエラーが出ます。他にも色々使えない関数が出てきました。 --------------------------------------------- #include <windows.h> #include <dshow.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){ TCHAR ore[64]; lstrcpy(ore,TEXT("こんにちは")); return 0; } --------------------------------------------- bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib" -I"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -I"C:\Program Files\Microsoft Platform SDK\Include" -L"C:\Program Files\Microsoft Platform SDK\Lib" -W test.cpp --------------------------------------------- エラー E2451 test.cpp 7: 未定義のシンボル lstrcpy_instead_use_StringCbCopy_or_St ringCchCopy(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) もし解決方をご存知の方がいらっしゃいましたらご教授なにとぞお願い致します。

  • DXライブラリを使用した画像表示について

    ゲームプログラミングを始めたいと考えている初心者です。 Borland C++ 5.5.1,BCC Developer,DXライブラリを使用しています。 下記のプログラムをメイクして実行すると、ウィンドウは表示されるのですが、画像が表示されません。画像の保存場所はプロジェクトの中のDebugフォルダです。どんな原因が考えられるでしょうか?ウィンドウは表示されていて実行できているのでプログラムの記述の問題ではないと考えます。 使用しているOSがMeです。Meではできないのでしょうか? お詳しい方、ぜひご回答お願いします。 ---------------------------------------------------------------- #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } /*--ここから下に処理を記述--*/ LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ; /*--ここまでが処理--*/ WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

  • 実行時dllを動かしたい

    のですがサイトで見つけたdllの作り方を見て 大人気の無償Borland C++5.51を使って //mydll.cpp #include <windows.h> BOOL __stdcall MyBeep() { return MessageBeep(0); } int __stdcall MyMessageBox(LPCTSTR lpszMessage) { return MessageBox(NULL,lpszMessage,"",0); } を bcc32 -WD mydll してmydll.dllを作り //myexe.cpp #include <windows.h> typedef int (__stdcall *pMyFunction)(LPCTSTR); int APIENTRY WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { HINSTANCE hLib; pMyFunction pMyMessageBox; hLib = LoadLibrary("mydll.dll"); if(hLib) { pMyMessageBox=(pMyFunction)GetProcAddress(hLib,"MyMessageBox"); if(pMyMessageBox)(*pMyMessageBox)("HELLO!!"); FreeLibrary(hLib); } return 0; } を bcc32 -W myexe してmyexe.exeを作り myexe.exe したのですがHELLO!!がでません。 どうしたらいいのでしょうか?

  • 「外部シンボルが未解決」について教えてください

    BCCを使ってます。windowsのプログラムで、『外部シンボル 'MyCreateFontが未解決』と言うメッセージが出たのですが、リンクエラーなのでしょうか? また、『外部シンボル○○が未解決』と表示された場合、どのような処置をすればいいですか。アドバイスをお願いします。 D:\borland\bcc55\lesson>bcc32 -W -w-8057 timer.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland timer.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'MyCreateFont(int, unsigned long, const char *)' が未解決(D:\BORLAND\BCC55\LESSON\TIMER.OBJ が参照 ) こちらが、宣言の部分です。 #include <windows.h> #define ID_MYTIMER 100 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); HFONT MyCreateFont(int, DWORD, LPCTSTR); char szClassName[] = "clock"; //ウィンドウクラス int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)

  • Borlandで組んだC+サンプルでエラーに

    borlandでc++のあるサイトのサンプルを動かそうとしたのですが、 C:\borland\work\stl_sample3>bcc32 stl_sample3.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland stl_sample3.cpp: エラー E2206 stl_sample3.cpp 22: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 30: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 33: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 43: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 45: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 48: 不正な文字 '$' (0x24)(関数 main() ) *** 6 errors in Compile *** というエラーになりました。 22行目は map<string, vector<string> > $_POST; となっています。 もしかして、borland c++コンパイラでは$が使えないのでしょうか? VSでないとダメなのですか?

  • WinMainのコンパイルについて

    こんにちわ。 某動画のまねをしてテトリスの作成に取り掛かっているのですが、最初から躓いてしまい困っています。 ◆現象 コンパイル時にWinMainが再宣言されているというような内容のエラーが出てしまい、コンパイルに失敗する D:\tetris>gcc -mwindows tetris.cpp tetris.cpp:18: error: `int WinMain' redeclared as different kind of symbol C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1109: error: previous declaration of `int WinMain(HINSTANCE__*, HINSTANC E__*, CHAR*, int)' tetris.cpp:18: error: declaration of `int WinMain' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1109: error: conflicts with previous declaration `int WinMain(HINSTANCE_ _*, HINSTANCE__*, CHAR*, int)' tetris.cpp:18: error: `HINSTANSCE' was not declared in this scope tetris.cpp:18: error: expected primary-expression before "hPrevInst" tetris.cpp:18: error: expected primary-expression before "cmdLine" tetris.cpp:18: error: expected primary-expression before "int" tetris.cpp:18: error: initializer expression list treated as compound expression tetris.cpp:18: error: expected `,' or `;' before '{' token ◆環境 OS:Windows コンパイラ:MinGW ◆問題個所のソース int WinMain(HINSTANSCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int cmdShow){ WinMainの宣言個所はここだけなのでエラーの意味がよくわからず、色々と調べてみましたが原因はよくわかりませんでした。 Win32APIについてはあまり詳しくないので(C++の原因かもしれませんが)解説できる方がいらっしゃったらご回答願います。

専門家に質問してみよう