ページ 11

C++builderのsndPlaySound()関数について

Posted: 2014年7月24日(木) 14:49
by ツンドラ
enbacadero C++builderでアプリケーション開発を学んでいます。
言語のC++と、C++builderは最近使いはじめた素人です。クラスの概念等はあまりわかっていません。
C言語の知識は人並みにあります。

今回は、VCLフォームアプリケーションで、Editから受け取ったwavファイルの名前(文字列)をもとに、wavを再生をするアプリを作りたいです。
何か改善する術はないかと思い、こちらを利用させていただきました。

まずフォーム上にButton1とEdit1だけをおいています。
ここではbutton1のオンクリックイベントのみ記述します。

#include <MMSystem.h>をしています。

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	wchar_t name;

	name = Edit1->Text.c_str();

	sndPlaySound(name,SND_ASYNC);
}
sndPlaySound()関数の第一引数がwchar_t型らしいのでwchar_tで変数宣言をしています。
あとはEdit1に受け取った文字列をnameに格納し、sndPlaySound()関数に渡しています。

上記のコードでコンパイルが通らず、以下のエラーがでます。
[bcc32 エラー] Unit1.cpp(22): E2034 'wchar_t *' 型は 'wchar_t' 型に変換できない
[bcc32 エラー] Unit1.cpp(24): E2034 'int' 型は 'const wchar_t *' 型に変換できない
[bcc32 エラー] Unit1.cpp(24): E2342 パラメータ 'pszSound' は const wchar_t * 型として定義されているので wchar_t は渡せない

Unit1.cpp(22)は

コード:

name = Edit1->Text.c_str();
Unit1.cpp(24)は

コード:

sndPlaySound(name,SND_ASYNC);
をさしています。

理想は「Edit1にaaa.wavと入力→button1をクリック→アプリ上でaaa.wav再生」という流れです。
文字の型などがよくわからずコンパイルも通せずにいます。アドバイスよろしくお願いします。

Re: C++builderのsndPlaySound()関数について

Posted: 2014年7月24日(木) 15:06
by h2so5
nameをポインタ型にしてください。

Re: C++builderのsndPlaySound()関数について

Posted: 2014年7月24日(木) 17:23
by ツンドラ
h2so5さんへ

ご指摘ありがとうございます。
nameをポインタにし、無事理想の動作をさせることができました。

以下改善したコード

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    wchar_t *name;
 
    name = Edit1->Text.c_str();
 
    sndPlaySound(name,SND_ASYNC);
}