PostQuitMessage()未定义?

时间:2016-03-11 01:55:28

标签: c++ winapi

我一直在使用基本的Windows编程教程,并且在使用 PostQuitMessage(0); 时遇到困难,编译器声称它未定义。我相信问题是我缺少一个命名空间或一些库,但无法解决它。另请注意, PostQuitMessage()不是唯一未定义的函数,其他包括: DefWindowProc() WNDCLASSEX GetClientRect( )。我正在使用带有已清理的DirectX 11项目模板的Visual Studio 2015。很感谢任何形式的帮助。以下是我的代码:

#include <Windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM
lParam)
{
    if (uMsg == WM_DESTROY)
    {
        PostQuitMessage(0);
        return 0;
    }

    DefWindowProc(hwnd, uMsg, wParam, lParam);
}

int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE prevInst, LPWSTR cmd, int 
nCmdShow)
{
    WNDCLASSEX windowClass;

    return 0;
}

(是的,我知道代码还没有完成,我只想在继续之前解决这些错误。)

3 个答案:

答案 0 :(得分:1)

请参阅此博客:

Introducing the Universal CRT

您需要确保您的项目与Universal CRT DLL(ucrt.dll)相关联。因此,请确保更新附加的include目录以指向ucrt头的位置,并将附加的库目录更新为指向ucrt lib文件。

    $(UniversalCRT_IncludePath)
    $(UniversalCRT_LibraryPath_x86)
    $(UniversalCRT_LibraryPath_x64)
    $(UniversalCRT_LibraryPath_arm)

注意 - 宏并不总是扩展到正确的UCRT位置。 因此,您需要检查系统中的实际路径。在我的系统上,我使用以下内容:

对于包含路径:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0

对于Lib路径:

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt

根据您安装的SDK的版本,可能会有所不同

添加包含文件:

Project properties --> C/C++ --> General --> Additional Include Directories

添加lib文件:

Project properties --> Linker --> General --> Additional Library Directories 

(Or Properties --> VC++ Directories --> Library Directories)

答案 1 :(得分:0)

MSDN联机文档指出给定函数需要哪个DLL。

对于PostQuitMessage,它表示您链接usr32.lib(为了在运行时提取usr32.dll)。

我通过在Google中输入MSDN PostQuitMessage并点击第一个结果来找到这个。

答案 2 :(得分:-2)

PostQuitMessage()DefWindowProc()GetClientRect()WNDCLASSEX,这些全部来自Win32 API,它们都在winuser.h中声明,即{ {1}}由#include提供。因此,请确保代码中windows.h Windows.h文件实际上是Win32 API的正确文件,而不是其他人的文件。您的项目碰巧引用的单独库/ SDK中的版本。