gpt4 book ai didi

windows - 假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条指令被调用,对于窗口 hWnd,GetDC() 是否有可能返回 NULL?

转载 作者:可可西里 更新时间:2023-11-01 10:08:24 28 4
gpt4 key购买 nike

假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条 指令被调用,对于窗口 hWndGetDC() 是否可能返回 NULL

我担心 GetDC() 可能因资源不足而失败。当发生这种情况时,我应该检查错误吗?调用失败怎么办? Win32 API 函数会引发异常还是我应该引发异常?

最佳答案

GetDC() 确实会失败,无论您何时何地调用它。在处理 API 时,您应该采取相当悲观的观点,并为任何 API 函数失败做好准备。正如您所建议的,失败的一个可能原因是系统资源耗尽,例如内核句柄、GDI 对象等。

所以你应该经常检查错误。不仅是 GetDC(),对 API 函数的每次调用都应该检查其返回值。

Windows API 不会通过引发异常来指示错误。相反,错误总是通过 API 函数返回的值发出信号。您需要查阅文档以了解每个函数如何报告错误。

如果您在 GDI 函数(如 GetDC())中遇到故障,那么您无能为力。在您描述的场景中,我会记录错误或将其报告给用户,然后终止执行。 GetDC() 失败后通常无法恢复。

每次调用 API 函数时检查错误的痛苦是我们有这么多框架包装低级 API 的原因之一。一个好的框架将为您进行错误检查并将任何错误转换为异常。使用一个好的框架可以让你专注于正常的执行流程,而不是让你的代码乱七八糟地处理异常情况的代码。

关于windows - 假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条指令被调用,对于窗口 hWnd,GetDC() 是否有可能返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261652/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com