Winapi win32应用程序中的visual studio中出现错误LNK2019?

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

我试图在VisualStudio中编写我的第一个程序,但是我遇到了一个错误。 它说:-

    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 2013

Win32应用程序从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

参考: