본문 바로가기

개발 Note/UI Framework 개발하기

stdafx.h 를 없애보자!

반응형



가끔 개인적으로  stdafx.h 는 골치 아프게 할때가 있습니다..

테스트 코드를 작성해서 시험해보거나, Code generation 툴을 이용해서 만들어진 코드에 작업하는 경우, 그리고 작성된 코드를 visual studio가 아닌,
개발환경( gcc , armcc 등등 ) 에서 cross compile 해야 하는경우 등이 대표적인 예입니다.


visual studio 에서 Win32 Project를 만들었을 경우,  stdafx.h 를 없애기 위한 절차는 다음과 같습니다.

1. 
프로젝트 프라퍼티( Property) -> C/C++ -> Precompiled Headers
: Create/Use Precompiled Header :Not Using Precompiled Headers 로 변경

2. 각 소스파일에서 include "stdafx.h" 를 없앤다.


3. 이렇게 변경을 하고 나면, 아마 이런 에러가 날것입니다.
unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup 

이 에러는 WinMain이 없다는 예기인데요.

3. 위와 같은 에러가 발생하면, Main이 들어있는 소스 파일을 확인해보자.

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)


Visual studio 에서 사용되는 CRT library가 _tWinMain을 호출하도록 되어있습니다.
그런데 우리가 Precompiled header를 없앴기 때문에, 이제 WinMain을 요구하는 것이죠.
그래서 위의 _tWinMain을 WinMain으로 변경하면 됩니다.
이때 주의 사항은 3번째 파라미터 인 LPSTR    lpCmdLine 입니다.
tWinMain에서는 LPSTR로 되어있어서 그냥 이름만 바꾸면 안되고, parameter 타입도 확인하셔야 합니다.

[WinMain 의 prototype]
 

int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR    lpCmdLine,
                     int       nCmdShow) 



여기까지 하고 나면 빌드 성공!!!!!

즐거운 프로그래밍 생활 하세요!