Я обновил старый проект с VC6 до VS2008, и теперь я получаю эту ошибку компиляции:
error C2731: 'wWinMain' : function cannot be overloaded
В этих строках кода:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
Тот же проект прекрасно компилируется под VC6.
Спасибо всем, я наконец нашел настоящего виновника, это опечатка, я использую 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 — нет.
У меня была такая же ошибка с Консольное приложение Win32. Исправление было: