2012.01.12 22:32

나름대로 프로그래밍을 해오면서 이제 툴은 잘 쓸수 있겠지! 라고... 생각해 오고 있었는데... 그건 혼자만의 착각이었던듯 싶다.

나름 MS 친화적(?)이라고 생각하는데, DirectX를 공부해보기 위해 프로젝트를 생성하는 부분부터 막히니 지금까지 뭘 해왔나 싶었다.

C#하고 XNA나 Windows Phone 프로그램등을 Visual Studio에서 만들었음에도 불구하고, 이들은 모두 C# 언어이니 C++로 개발하는 DirectX를 하고자 Visual Studio의 개발 설정을 C#에서 C++로 변경하였더니 이건 또 전혀 다른 툴을 보는 느낌이었다.

1학년, 2학년때 까지 C언어를 썼었지만 이 마저도 한 1년 안쓰니 기억이 안나는 판에 생각해보니 C와 C++이 비슷하다 해도 많이 다른(?) 문제가 있어서 더 난감했다.

일단 프로젝트를 생성하는 부분에서 부터 막혔는데... C#이나 XNA 또는 WP의 경우 대충 Windows Forms 응용 프로그램이나 Windows 게임 등을 선택해주면 기본적인 상태가 갖추어진 상태로 시작하니 뭔가 "바로 할수 있겠다!" 라는 느낌을 받는데 반해 C++에서 DirectX를 하자니 MFC로 해야하는지 Win32로 해야하는지 아니면 그냥 빈 프로젝트로 생성해야 하는지도 알지 못하고 있다는 것을 알았다.

▲ DirectX를 하기위해서 Win32 프로젝트로 프로젝트를 생성한다.

▲ 프로젝트 생성시 '빈 프로젝트'로 생성하도록 한다.

 '내가 64비트 OS를 쓰니 Win64 프로젝트로 해야하는거 아닌가?' 라는 생각에서 부터 'XNA처럼 C++에 기본으로 셋팅되어있는 프리셋같은건 없나?'라는 생각까지 해가면서 여차저차 DirectX를 하기위해서 'Win32 프로젝트'를 '빈 프로젝트'로 만들어야 한다는걸 알게되었다.

(처음에는 '빈 프로젝트'를 선택하는걸 안하고 마침을 눌러 생성했더니 이것 저것 코드가 있는 상태로 시작되어 내 머리속에 떠오른 생각은... 이건 뭥미?)

 이제와서 생각해보면 Win32 프로젝트 생성이나 빈 프로젝트 같은 옵션들도 이미 알고 있었던 부분인데도 DirectX라고 생각하며 너무 특별하게 생각하고 있었던 것 같기도 하다.

빈 프로젝트로 생성하고나서 C#에 익숙한 나머지 당연히 새 클래스를 생성해야지 했다가 클래스 마법사가 나오는걸 보고 이건 뭘까... 내가 C나 C++을 이렇게 몰랐나라는 생각을 했다.
(내가 컴퓨터공학과 학생이 맞나... -ㅅ-)

▲ 그냥 적당한 이름(?)으로 cpp파일을 만들어주고 거기에다가 코딩하면 된다.

결과적으로 이제 코딩만 하면 되겠지! 라며 책에 있는 코드를 잘 따라 입력하여 컴파일을 했더니 뭔가 알수없는 오류가 나왔다. (중간에 Gooooogle 검색과정에 대한 이야기는 생략)

결론은 C#에 익숙한 내가 '포함 디렉터리(Include)'와 '라이브러리 디렉터리(Lib)'를 설정하는 것을 안하고 넘어간 탓이었다.

▲ 솔루션 탐색기에서 프로젝트명을 오른쪽 클릭하여 나오는 프로젝트 속성 페이지에서

VC++ 디렉터리에 있는 포함 디렉터리와 라이브러리 디렉터리에 각각 DirectX SDK 폴더내의 Include 폴더와 Lib 폴더를 추가해 주면 된다.

Lib 폴더를 설정해줄때 x86과 x64 두개의 폴더가 있는데 (각각 32bit, 64bit 개발을 위한 폴더) 기존 책이나 예제 들이 32bit 환경에서 쓰여져서 그런지 64bit OS라고 64bit를 선택했더니 소스가 제대로 컴파일 되지 않았다. (결론은 x86 폴더를 추가했다)

이렇게 VC++ 디렉터리만 추가하고 컴파일하면 물론 컴파일이 되지 않았다. 문득 생각난건데 C#같은 경우는 내가 대충하면 컴파일러가 알아서 챙기는 쪽이고 C++는 개발자가 다 챙겨줘야하는 그때서야 동작하는 타입인 것이라고 할 수 있을 듯 하다. (각각의 장단점이 있겠지만 개인적인 생각일 뿐이므로...)

방금전 디렉터리를 설정했던 속성 페이지의 링커 -> 입력의 추가 종속성에 DirectX 개발을 위한 라이브러리들을 잘 써주고 코드에 문제가 없다면 드디어 파란색으로 칠해진 윈도우를 볼 수 있으면 좋겠지만...

그대로 실행하면 error C2440 랑 error C2664 를 출력창에서 볼 수 있다. (험난하다)

검색신공을 발휘해본다면 대충 프로젝트 속성 페이지에서 구성 속성 -> 일반 에 있는 문자 집합의 설정이 어떻게 잘못되어 있다는 것을 알게되는데... 어쨌든 유니코드로 설정되어 있는 문자집합을 사용안함으로 하거나 멀티바이트 문자 집합 쪽으로 바꿔주면 제대로 컴파일이 된다.

▲ 구성속성 -> 링커 -> 입력 -> 추가 종속성에 DirectX 개발을 위한 라이브러리를 추가

▲ 위와 같은 문제가 발생하면 ▼ 아래와 같이 처리하라!


▲윈도우의 오류 화면을 연상케하는 Bluescreen!!

 결국 모든건 알면 쉽지만 모르면 헤매게 되는 듯 하다. 그래서 이런 글을 블로그에 쓰고 있는지도...
 (내가 나중에 까먹어서 헤맬까봐)

결론으로 요약을 해보자면 이렇다.

1. Win32 프로젝트 + 빈 프로젝트로 프로젝트 생성

2. 프로젝트 속성에서 VC++ 디렉터리 설정

3. 프로젝트 속성에서 링커의 추가 종속성을 설정

4. 구성 속성에서 문자 집합을 유니코드 외에 다른 것으로 설정

C# 이나 JAVA 랑 비교했을 때 분명 귀찮은 작업이 많지만.. 이것도 결국 익숙하냐 마냐 아냐 모르냐의 문제일 뿐인듯하다... 결국엔 이런 자잘한 것보다 알고리즘이 더 중요한 것일테고 프로그래밍 언어가 다 거기서 거기라고 누가 말했던 것 같던데... 으음... 한마디로 이런 Tool 사용법은 자주 하다보면 자연히 익혀지더라는 것...
저작자 표시 비영리 변경 금지
신고

'Programming > DirectX' 카테고리의 다른 글

Visual Studio 2010에서 DirectX 하기?  (3) 2012.01.12
Posted by Ianuarias