질문과 답변

윈도우즈 API 정복 예제를 Visual Studio 2017 프로 버전으로 새로 빌드 할 때 문제입니다. 날짜:2020-8-29 4:59:34 조회수:94
작성자 : 엉터리박사
포인트 : 14
가입일 : 2020-08-04 14:23:11
방문횟수 : 11
글 2개, 댓글 2개
소개 : 만년 개발자 입니다.
작성글 보기
쪽지 보내기
안녕하세요. 52장 멀티미디어 부분을 살펴보고 있습니다. 

배포된 저자님의 소스의 각각의 PlaySound, MCIWave, PlayAvi 폴더의 각각의 sln 파일을 
클릭하고 단방향 업그레이드, 마이그레이션을 하면서 열어 보면 새롭게 새로운 폴더와 파일이 
생성되며 각 각 컴파일(빌드) 해보면 Debug 모드 든 Release 모드 든 잘 빌드 됩니다. 


하지만 제가 직접 각 프로젝트를 VS 2017 프로 버전으로 직접 프로젝트 생성 후, 
빌드해보면 빌드 자체가 안 됩니다. 

절차
파일 ㅡ> 새로 만들기 ㅡ> 프로젝트(프로젝트 명 기입) 생성, 
프로젝트명과 동일한 cpp 생성 ㅡ> 해당 소스 코드를 카피 한 후 붙여 넣기. 
해당 프로젝트 속성 설정 (속성 링커 입력 추가 종속성에서 편집 선택 후) 

winmm.lib나 vfw32.lib.  프로젝트에 맞게 잘 기입.

하지만 빌드(컴파일) 자체가 안 됩니다. 

소스 코드의
TCHAR *Mes = "왼쪽 버튼을 누르면 사운드를 연주합니다."; 
Result = PlayWaveFile(hWnd, "Bugle.wav"); 
큰 따옴표로 묶인 부분이 클린이 안 되면서 빌드도 잘 안 됩니다. 

물론, 프로젝트 속성의 일반 탭에 문자 집합의 설정을 
설정 안 함
유니코드 문자 집합 사용 
멀티바이트 문자 집합 사용
바꿔 가면서 빌드 해보아도 잘 클린이 안 되면서 아예 빌드도 안 됩니다. 

서적의 2장 First 예제는 직접 코딩시에 빌드가 잘 됩니다. 

무엇이 문제인지 알고 싶습니다. 

고수님들 부탁드립니다. 


 



아자!

목록보기 삭제 수정 신고 스크랩

소엔 8월30일 1:20:50  

책을 집필할 때와는 컴파일러 환경이 많이 바뀌어 프로젝트의 디폴트 설정상의 차이가 있습니다. 설정에서 문자집합은 "설정안함"으로 조정하십시오. 그리고 문자열의 상수성에 대한 제한도 많이 바뀌어서 모든 문자열 상수를 TEXT() 매크로로 감싸 주셔야 합니다. 또한 TCHAR *는 const TCHAR * 또는 LPCTSTR로 상수성을 주어야 합니다. PlaySound 예제의 경우 다음 부분을 수정하시면 컴파일됩니다.

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 LPCTSTR Mes = TEXT("왼쪽 마우스 버튼을 누르면 사운드를 연주합니다.");
 switch (iMessage) {
 case WM_LBUTTONDOWN:
  // 비동기 연주
  PlaySound(TEXT("Bugle.wav"),NULL, SND_ASYNC);

나머지 예제도 방식은 같습니다. 책을 출판한지 15년이나 되다 보니 바뀐 환경에 맞지 않는 경우가 종종 있습니다. 예제를 살펴 보실 때는 가급적 배포 예제를 마이그레이션해서 살펴 보시고 직접 실습을 할 때는 설정을 바꿔서 컴파일하십시오.
 


로그인하셔야 댓글을 달 수 있습니다.