我将旧项目从VC6升级到VS2008,现在我收到了这个编译错误:
error C2731: 'wWinMain' : function cannot be overloaded
在这些代码行中:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
同一个项目在VC6下编译得很好。
答案 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控制台应用程序中遇到了同样的错误。修复是: