PlaySound関数の使い方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みけCAT

PlaySound関数の使い方について

#1

投稿記事 by みけCAT » 15年前

C言語でゲームを作ってみようと思い、Dev-C++4.9.9.2でプログラムを書いています。
PlaySoundA関数で効果音を鳴らそうと思い、コードを書くと、以下のエラーでコンパイルが通らなくなりました。
PlaySoundA関数を加える前はうまく動いていました。
ソースコードは添付してあります。
エラーメッセージ(コンパイルログ)
コンパイラ: Default compiler
 gcc.exe -finput-charset=cp932 -fexec-charset=cp932... 実行中
gcc.exe -finput-charset=cp932 -fexec-charset=cp932 "H:\C\linegame\linegame.c" -o "H:\C\linegame\linegame.exe"   -mwindows  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib" -mwindows 
H:\C\linegame\linegame.c: In function `WinMain':
H:\C\linegame\linegame.c:96: warning: passing arg 3 of `CreateThread' from incompatible pointer type
H:\C\linegame\linegame.c:96: warning: passing arg 6 of `CreateThread' from incompatible pointer type

C:\Users\kota\AppData\Local\Temp/ccsDaaaa.o(.text+0x5bf):linegame.c: undefined reference to `PlaySoundA@12'
C:\Users\kota\AppData\Local\Temp/ccsDaaaa.o(.text+0x61c):linegame.c: undefined reference to `PlaySoundA@12'
collect2: ld returned 1 exit status

実行が中断されました
C:\Dev-Cpp\libにlibwinmm.aが存在します。
gcc -vの結果は以下の通りです。
Using built-in specs.
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)

シエル

Re:PlaySound関数の使い方について

#2

投稿記事 by シエル » 15年前

スレッドの関数の記述がおかしい気がします。
スレッドは今まではちゃんと動いてましたか?
winmm.libをリンクしてますか?

みけCAT

Re:PlaySound関数の使い方について

#3

投稿記事 by みけCAT » 15年前

PlaySoundA関数なしの、このレスで添付したプログラムは(警告が出ますが)動きます。
OSを書き忘れましたが、WindowsVistaSP2です。
winmm.libのリンクの仕方がわかっていないと思うので、質問させていただきました。

参考までにPlaySoundAありのソースの先頭部分です。
#include <windows.h>
#include <mmsystem.h>
#pragma link "libwinmm.a"
/*
次のものも試してみたけどだめでした 
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"libwinmm.lib")
#pragma comment(lib,"libwinmm.a")
#pragma comment(lib,"winmm.a")
#pragma link "winmm.lib"
#pragma link "libwinmm.lib"
*/

LPCSTR szWindowClass = "GAME_CLASS";
LPCSTR szWindowTitle = "線ゲーム Ver1.0";

/*以下略*/

シエル

Re:PlaySound関数の使い方について

#4

投稿記事 by シエル » 15年前

普通に
#pragma comment(lib"winmm.lib")
だけで良いと思いますが。

みけCAT

Re:PlaySound関数の使い方について

#5

投稿記事 by みけCAT » 15年前

次のものを試しましたが、できませんでした。
#pragma comment(lib"winmm.lib")
#pragma comment(lib"libwinmm.a")
#pragma comment(lib"libwinmm.lib")
#pragma comment(lib"winmm.a")
#pragma comment(lib"winmm")
#pragma comment(lib"libwinmm")

toyo

Re:PlaySound関数の使い方について

#6

投稿記事 by toyo » 15年前

プロジェクトオプションのリンカに追加してみてはどうでしょう

みけCAT

Re:PlaySound関数の使い方について

#7

投稿記事 by みけCAT » 15年前

ツールバーにあるオレンジ色の「プロジェクトオプション」のボタンをクリックするとアクセス違反が起きます。
以下Bug Report
Application version: 4.9.9.2

Machine info
---------
Platform       : Windows NT
OS version     : version 6.0 (build 6002)
Additional info: Service Pack 2


The following error occured in version 4.9.9.2:
アドレス 0012F83F でアドレス 0012F83F に対する書き込み違反がおきました。 (at address 0x0012F83F)


Please include a description of what you were doing before the error occured (please give as much precisions as possible) : 


State information follows:
Stack trace:
------------
0058EB22 (0018DB22): GatherSystemInfo (ExceptionsAnalyzer - 454)
0058ED17 (0018DD17): GatherSystemInfo (ExceptionsAnalyzer - 459)
0058C428 (0018B428): GetExTyp (utils - 642)
0055C10E (0015B10E): TMainForm.GetEditorFromFileName (main - 4468)
00559AA3 (00158AA3): TMainForm.actAboutExecute (main - 3464)
00567B33 (00166B33): TCompiler.FindDeps (compiler - 370)
00583E7A (00182E7A): TdevExternalPrograms.AssignedProgram (devcfg - 2169)
00590383 (0018F383): ExceptionsAnalyzer (ExceptionsAnalyzer - 671)
005903A1 (0018F3A1): ExceptionsAnalyzer (ExceptionsAnalyzer - 675)
0058FDD8 (0018EDD8): TfrmExceptionsAnalyzer.FormCreate (ExceptionsAnalyzer - 643)
0058FDD8 (0018EDD8): TfrmExceptionsAnalyzer.FormCreate (ExceptionsAnalyzer - 643)

ISLe

Re:PlaySound関数の使い方について

#8

投稿記事 by ISLe » 15年前

#pragma link "ほげほげ"
はボーランドのコンパイラ、
#pragma comment(lib, "ほげほげ")
はマイクロソフトのコンパイラ
専用です。

gccではコンパイルオプションに-lwinmmを追加してください。
libwinmm.aをリンクします。

みけCAT

Re:PlaySound関数の使い方について

#9

投稿記事 by みけCAT » 15年前

ISLe様
ツール>コンパイラオプション>コンパイラを呼ぶ際、以下のコマンドを付加する
に追加したらうまく動きました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る