我一直在使用基本的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;
}
(是的,我知道代码还没有完成,我只想在继续之前解决这些错误。)
答案 0 :(得分:1)
请参阅此博客:
您需要确保您的项目与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中的版本。