错误C2731:'wWinMain':函数不能重载

sas*_*alm 4 c++ winapi compiler-errors visual-studio

我将旧项目从VC6升级到VS2008,现在我得到了这个编译错误:

error C2731: 'wWinMain' : function cannot be overloaded
Run Code Online (Sandbox Code Playgroud)

在这些代码行:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
Run Code Online (Sandbox Code Playgroud)

在VC6下,同一个项目编译得很好.

sas*_*alm 11

谢谢大家,我终于找到了真正的罪魁祸首,这是一个错字,我用LPSTR lpCmdLine而不是LPTSTR lpCmdLine.真正的谜团是为什么它在VC6下完全编译 - 它确实使用了wWinMain,但不知何故,lpCmdLine可以char *代替它WCHAR *.

现在我把它改为:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
Run Code Online (Sandbox Code Playgroud)

它也适用于VS2008.

编辑:我成功编译甚至在VC6下使用此函数定义运行程序:

int APIENTRY wWinMain(int *hInstance, float hPrevInstance, int *lpCmdLine, float nCmdShow)
{
    MessageBox(0,L"Running.",0,0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,替换float nCmdShowdouble nCmdShow确实会给出链接器错误,我假设因为float是32位而double则不是.

  • 它在VC6中成功编译的保证被误导了.很好找!如果你能弄清楚如何在VC6中编译它也会有很大的帮助.谢谢 (2认同)

小智 5

对我来说,在 VS 2019 中将 WinMain 更改为 wWinMain 后它就起作用了