WinMain()到main()宏的奇怪错误

时间:2012-04-25 03:34:22

标签: c windows winapi macros

/** 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)

现在,当我在这里使用此代码时:

PRO_MAIN(argc, argv)
{
  ...
}

我收到错误:

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

有什么问题?

1 个答案:

答案 0 :(得分:4)

你违反了规则:double-underscores are reserved for implementation! (除其他外。)

您根本无法使用__mainmain___Main等。您应该选择其他内容。

我建议你做这个工作:

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

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

其中的另一个优点是,对于非Windows应用程序,PRO_MAIN可以简单地扩展为空,程序仍然可以使用标准主函数进行编译。这就是我的工作。