|
:
: PlaySound() 로 wav 파일을 재생시켰는데("mmsystem.h" 를 인쿠르드해서...) 꼭 wav파일이 있어야 하더군요...
:
: exe 파일에 포함 시키는 방법이 있는걸루 아는데,
:
: Rh 파일 만들고,Rc 파일만들고...
:
: 아무리 해도 잘안되더라구요...
: 자세히 좀 갈켜 주세요...
임펠리테리입니다.
먼저 RC 파일을 작성합니다. 방법은 아주 간단합니다. 텍스트파일로 만들고, 내용은,
MYWAV RCDATA "MyWav.wav"
이것이면 충분합니다.
전에 천리안에서 어느분이 리키씨의 책을 보고 해보았더니 안된다고해서 그분의 책을 찾아봤는데,
그 책을 보면, 마치 WAV라는 리소스형식이 있어서 그렇게 지정하면 되는 것처럼 적어놨더군요.
MYWAV WAV "MyWav.wav" // 이것은 틀린 내용입니다.
실제로 테스트도 해보지 않고 책을 쓴 모양이죠? 리소스로 지정할 수 있는 형식은 제한이 있고,
그 중 WAV라는 형식은 없습니다. 아이콘, 메뉴, 스트링, 비트맵 등등 허용되는 형식들 외에는
모두 RCDATA 형식으로 지정해야 합니다.
그런 후에 빌더의 Project->Add to Project 메뉴에서 이 파일을 프로젝트에 추가합니다.
그리고 코딩. wav파일을 리소스로부터 플레이하기 위해 PlaySound() api 함수에서 직접 리소스를
지정하는 방법을 쓰더군요.
PlaySound("MYWAV", HInstance, SND_RESOURCE);
그런데.. 다른 분들은 잘 되는지 모르겠습니다만, 제 경우엔 잘 안되더군요. 그래서 다른 방법을
써봤습니다. 리소스스트림을 만들어서 해당 wav 리소스를 메모리로 로드하고, 그런 후 PlaySound()
함수에서 플레이하도록 했습니다.
TResourceStream *Res = new TResourceStream((int)HInstance, "MYWAV", RT_RCDATA);
PlaySound((char *)Res->Memory, NULL, SND_MEMORY);
delete Res;
직접 테스트해본 결과 아주 잘 됩니다.
또, 볼랜드 사이트의 FAQ를 찾아봐도 비슷한 내용이 있는데, 리소스스트림을 사용하지 않고 API
함수만으로 코딩했더군요.
const char *WavInMemory = (LPCSTR)LockResource(
LoadResource(NULL, FindResource(NULL, "MYWAV", RT_RCDATA)));
PlaySound(WavInMemory, NULL, SND_MEMORY);
(알아보기 쉽게 약간 수정했습니다.)
두가지 방법 모두 가능하고, 똑같은 역할을 합니다.
그럼 참고하시길...
|