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

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

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

#1

投稿記事 by ツンドラ » 9年前

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再生」という流れです。
文字の型などがよくわからずコンパイルも通せずにいます。アドバイスよろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 9年前

nameをポインタ型にしてください。

ツンドラ

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

#3

投稿記事 by ツンドラ » 9年前

h2so5さんへ

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

以下改善したコード

コード:

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

閉鎖

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