【问题标题】:Error LNK2019 in visual studio in win32 application?win32应用程序中Visual Studio中的LNK2019错误?
【发布时间】:2014-01-04 05:31:20
【问题描述】:

我尝试在 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;
}

我该如何解决这个问题?

附:我正在使用 Visual Studio Ultimate 2013

【问题讨论】:

    标签: winapi visual-studio-2013 lnk2019 msvcrt


    【解决方案1】:

    对于 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)。

    参考:MSDN entry for ShowWindow

    【讨论】:

      【解决方案2】:

      Win32 应用程序从 WinMain 启动。控制台应用程序从 main 开始。您的问题意味着您将两者混为一谈。

      只需使用“文件”、“新建”、“项目”菜单命令,让 Visual Studio 构建您心目中的应用程序类型的框架。

      【讨论】:

        猜你喜欢
        • 2020-05-07
        • 2016-11-10
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 2016-08-26
        相关资源
        最近更新 更多