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

时间:2014-10-30 11:30:11

标签: c++ visual-studio winapi compiler-errors

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

error C2731: 'wWinMain' : function cannot be overloaded

在这些代码行中:

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

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

3 个答案:

答案 0 :(得分:10)

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

现在我将其更改为:

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

它也适用于VS2008。

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

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

有趣的是,将float nCmdShow替换为double nCmdShow确实会产生链接器错误,我假设因为float是32位而不是double。

答案 1 :(得分:1)

对我来说,它在 VS 2019 中将 WinMain 更改为 wWinMain 后有效

答案 2 :(得分:0)

我在 Win32控制台应用程序中遇到了同样的错误。修复是:

  1. 打开项目> 属性......
  2. 展开配置属性> 链接器> 系统
  3. 子系统设置为未设置
  4. 点击确定