2012-04-25 38 views
2
/** converts 'WinMain' to the traditional 'main' entrypoint **/ 
#define PRO_MAIN(argc, argv)\ 
    int __main (int, LPWSTR*, HINSTANCE, int);\ 
    int WINAPI WinMain (HINSTANCE __hInstance, HINSTANCE __hPrevInstance, \ 
         LPSTR __szCmdLine, int __nCmdShow)\ 
    {\ 
     int nArgs;\ 
     LPWSTR* szArgvW = CommandLineToArgvW (GetCommandLineW(), &nArgs);\ 
     assert (szArgvW != NULL);\ 
     return __main (nArgs, szArgvW, __hInstance, __nCmdShow);\ 
    }\ 
    \ 
    int __main (int __argc, LPWSTR* __argv, HINSTANCE __hInstance, int __nCmdShow) 

現在,當我使用這個代碼在這裏:奇怪的錯誤的main()宏

PRO_MAIN(argc, argv) 
{ 
    ... 
} 

我得到的錯誤:

error: conflicting types for '__main' 
note: previous declaration of '__main' was here 

什麼問題?

+0

什麼位置信息與「note:」行關聯?另外,你是否考慮過這個筆記告訴你的是什麼? – geekosaur 2012-04-25 03:47:28

+1

你也可以完全不用「WinMain」,使用'main',並明確地告訴鏈接器你想要一個'SUBSYSTEM:WINDOWS'程序。 – jamesdlin 2012-04-25 03:51:09

+0

@jamesdlin謝謝。雖然與問題無關,但這幾乎解決了我的項目的所有問題。但是我不會遇到任何問題嗎? – ApprenticeHacker 2012-04-25 04:07:06

回答

4

您違反了規則:double-underscores are reserved for implementation! (其中包括)

你根本不能使用__main,main__, _Main等你應該選擇別的東西。

我會建議你做這項工作:

int main(int argc, char* argv[]) 
{ 
    // main like normal 
} 

// defines WinMain, eventually makes call to main() 
PRO_MAIN; 

其中有額外的好處,對於非Windows應用程序,PRO_MAIN可以簡單地擴展到什麼,該項目仍與標準的主要功能編譯。這就是我所做的。