Winapi win32应用程序中的visual studio中出现错误LNK2019?
我试图在VisualStudio中编写我的第一个程序,但是我遇到了一个错误。 它说:-Winapi win32应用程序中的visual studio中出现错误LNK2019?,winapi,visual-studio-2013,lnk2019,msvcrt,Winapi,Visual Studio 2013,Lnk2019,Msvcrt,我试图在VisualStudio中编写我的第一个程序,但是我遇到了一个错误。 它说:- Error 3 error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup E:\Documents\Programming\Software Development\Microsoft Development\Microsoft Development\MSV
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;
}
#包括
#包括
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、,
LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(空,“Hello World!”,“Note”,1/*MB_OK*/);
printf(“nCmdShow=%d\n”,nCmdShow);
返回0;
}
如何解决此问题
另外,我正在使用Visual Studio Ultimate 2013Win32应用程序从WinMain启动。控制台应用程序从main开始。你的问题意味着你将两者混为一谈
只需使用File,New,Project菜单命令,Visual Studio就可以构建您心目中应用程序类型的框架。对于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的变体)。您可以将其强制到console子系统(-subsystem:console
标记到链接器),或者通过将入口点改为main
的变体,使其在默认情况下发生:
int wmain(int argc, wchar_t **argv) { // ...
显然,您将无法使用此选项打印nCmdShow
(这在控制台程序中并不意味着什么)。因此,由于您没有使用命令行参数,因此可以将其简化为:
int wmain(){ // ....
实际上,nCmdShow
基本上已经过时了,即使对于窗口程序也是如此。窗口程序第一次调用ShowWindow
,通常会将nCmdShow
作为参数传递。Windows依次忽略ShowWindow
的第一次调用中传递的值,而使用进程“STARTUPINFO
结构中的值。仅在对ShowWindow
的后续调用中使用参数(对于这些后续调用,您也不应该传递nCmdShow
——您应该传递一个定义的常量,例如SW\u SHOWNORMAL
)
参考: