我试图在Visual Studio中编写我的第一个程序,但是遇到了错误。它说: -
Error 3 error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup
E:\Documents\Programming\Software Development\Microsoft Development\Microsoft Development\MSVCRTD.lib(wcrtexew.obj)
Microsoft Development
在研究中,我发现了类似的错误,但没有一个可以帮助我解决问题。我已将入口点更改为
wWinMainCRTStartup
设置为Unicode的字符
要控制台的子系统。该项目是一个win32应用程序。代码如下:-
#include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Hello World!", "Note", 1/*MB_OK*/);
printf("nCmdShow = %d\n", nCmdShow);
return 0;
}
如何解决此问题?
PS我正在使用Visual Studio Ultimate 2013
对于Unicode构建,您的代码需要更像这样:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello World!", L"Note", 1/*MB_OK*/);
printf(L"nCmdShow = %d\n", nCmdShow);
return 0;
}
至少默认情况下,它将被设置为使用Windows子系统(因为入口点被命名为WinMain的变体)。您可以将其强制更改为控制台子系统(-subsystem:console
标记为链接器),或者通过将入口点更改为的变体main
来使其默认发生:
int wmain(int argc, wchar_t **argv) { // ...
显然,您将无法nCmdShow
使用它进行打印(并不是说它确实意味着控制台程序中的任何内容)。为此,由于您始终不使用命令行参数,因此可以将其简化为:
int wmain(){ // ....
实际上,nCmdShow
即使对于窗口程序也基本上已经过时了。窗口程序第一次调用时ShowWindow
,通常会nCmdShow
作为参数传递。Windows依次忽略在第一次调用中传递的值ShowWindow
,而是使用进程STARTUPINFO
结构中的值。仅在随后的调用ShowWindow
中使用参数(对于这些后续的调用,您也不应该传递nCmdShow
-您应该传递已定义的常量之一,例如SW_SHOWNORMAL
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句