2011-11-15 5 views
0

Windows에서 응용 프로그램을 개발하고 있지만 다른 플랫폼도 지원하고 싶습니다. (작성한 코드의 대부분은 플랫폼에 독립적입니다.)WinMain 매개 변수를 다른 함수에 전달합니다.

#ifdef _WIN32 
int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR cmdLine, 
        int cmdShow) 
#else 
int main(int argc, char* argv[]) 
#endif 
{ 
    /* If the application is launched under Windows */ 
#ifdef _WIN32 
    win_init wi; 
    return wi.init(hInstance, hPrevInstance, cmdLine, cmdShow); 
#endif 

    /* If the application is launched under OS X */ 
#ifdef __APPLE__ 
    osx_init oi; 
    return oi.init(); 
#endif 
} 

그래서 아이디어는 응용 프로그램이 있다는 것입니다 경우 : 나는 간단한 일을 계속하고 싶습니다 어쨌든, 개발 술에 대한 생각 때문에 내 main.cpp 약간은 다음과 같습니다 (아마도 나는이 접근 순진했다) Windows에서 실행되면 WinMain이 호출 된 다음 나머지 작업을 수행하기 위해 제공되는 WinMain 인수로 wi.init를 호출합니다.

은 내가 똑똑하고 생각했지만, 내가 컴파일 할 때 오류 얻을 :이 오류를 연구 한

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

을 사람들이 주요 방법을 잊어 버렸거나 시도 중 때 발생하는 것으로 보인다 .exe로 DLL을 컴파일

내 질문에; 왜 이런 일이 일어나고 있는지 궁금합니다.이 접근법 대신 제가 무엇을 권하고 싶습니다.

+1

앱이 아직 기본 Windows 앱이 아닌 콘솔 모드 앱으로 연결 중입니다. 이것은 의도적입니까? 그렇다면 main()을 표준 요구 사항으로 사용하십시오. 그렇지 않은 경우 Linker + System + SubSystem 설정을 사용하십시오. Linker + Advanced + Entry Point에 유의하십시오. –

답변

2

WinMain을 사용하려면 /SUBSYSTEM:WINDOWS 링커 옵션을 사용하고 싶습니다.

+0

고마워, 고쳐! – krslynx

관련 문제