2016-04-05 23 views
-1

Visual Studioを使用してC++でwavファイルを再生しようとしています。 私は私のプロジェクトディレクトリにファイル「my.wav」を入れて、コードPlaySoundはVisual Studioでは動作しますが、スタンドアロンのexeでは動作しません

PlaySound(TEXT("my.wav"), NULL, SND_FILENAME | SND_SYNC); 

を使用し、私は再生ボタン(またはF5あるいはCtrlキーを押しながらF5)を押すと、それが健全な罰金を果たしています。

コマンドプロンプトを開き、Debug /に移動してMyApp.exeを実行し、実行時にエラーチャイムを再生します。

注:理想的には、サウンドはexeでバンドルされるので、私はexeを配布するだけで動作します。私はResource.rcに入れてみましたが、すべての例で見るコードは

PlaySound((char*)IDR_WAVE1, NULL, SND_RESOURCE | SND_SYNC); 

私のためにコンパイルされていません。 IDR_WAVE1が自分のリソースの名前であるにもかかわらず、それについて苦情を言います。

+0

を使用するだけで、整数 'IDR_WAVE1'ないですリソースを識別する – wilx

+0

これを実行してもよろしいですか(https://msdn.microsoft.com/en-us/library/windows/desktop/dd743679(v = vs.85).aspx)。 – wilx

+2

相対パス(* "my.wav" *)を使用しています。 Visual Studioで設定されている現在の作業ディレクトリは、コマンドプロンプトから起動すると現在の作業ディレクトリとは異なります。 WAVをリソースとしてバンドルするか、完全修飾パスを使用します。 – IInspectable

答えて

0

私は古い学校のWin32で少しさびたんだけど、それはこのようなものだった:

あなたのファイルにRESOURCE.Hを含めるとMAKEINTRESOURCE

PlaySound(MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_SYNC); 
+0

私はすでにそれを試していましたが、あなたの答えの後にもう一度試して、私の間違いを認識しました。私は実際には2つのリソースファイルを持っていました。なぜなら、私はresource1.hをインクルードする必要があったからです。私は2つのリソースファイルを1つにまとめると、リソースとして動作します。 –

+0

技術的には、IInspectableは、元の質問で答えが返ってきた人です.exeとして実行すると動作しませんが、コメントとして回答して問題を解決したので、正しい解決策としてマークしてください。 –

0

私は、Visual Studioのリソーススクリプトファイル ".rc file"にリソースファイルをリンクして、.exeファイルに埋め込む必要があることを思い出してください。それ以外の場合は、@ wilxが指摘するようにロードする必要があります。

関連する問題