假设GetDC(hWnd)被调用为WM_CREATE的第一条指令,对于window hWnd,GetDC()是否可以返回NULL?

时间:2011-11-24 19:21:54

标签: windows winapi

假设在GetDC(hWnd)上将WM_CREATE作为第一个指令调用,对于窗口hWndGetDC()是否可以返回{ {1}}?

我担心由于资源不足导致NULL失败的可能性。当发生这种情况时,我应该检查错误吗?如果呼叫失败,我该怎么办? Win32 API函数是否会引发异常,还是应该引发异常?

1 个答案:

答案 0 :(得分:3)

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

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

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

如果您在GetDC()等GDI函数中遇到失败,那么您可以做很多事情。在您描述的场景中,我将记录错误或将其报告给用户,然后终止执行。 GetDC()的失败通常无法恢复。

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