C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[2592] Re:[질문] wav 파일을 exe 파일로 합치려면...
박지훈.임프 [cbuilder] 4405 읽음    1999-12-27 00:00
:
: 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);
(알아보기 쉽게 약간 수정했습니다.)

두가지 방법 모두 가능하고, 똑같은 역할을 합니다.

그럼 참고하시길...

+ -

관련 글 리스트
2576 [질문] wav 파일을 exe 파일로 합치려면... 서영재 3878 1999/12/25
2592     Re:[질문] wav 파일을 exe 파일로 합치려면... 박지훈.임프 4405 1999/12/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.