假设在GetDC(hWnd)
上将WM_CREATE
作为第一个指令调用,对于窗口hWnd
,GetDC()
是否可以返回{ {1}}?
我担心由于资源不足导致NULL
失败的可能性。当发生这种情况时,我应该检查错误吗?如果呼叫失败,我该怎么办? Win32 API函数是否会引发异常,还是应该引发异常?
答案 0 :(得分:3)
GetDC()
无论何时何地都可以失败,确实会失败。在处理API时,您应该采取相当悲观的观点,并为任何API函数的失败做好准备。如您所述,失败的一个可能原因是系统资源耗尽,例如:内核句柄,GDI对象等。
所以你应该经常检查错误。而且不只是GetDC()
,每次调用API函数都应该检查其返回值。
Windows API不会通过引发异常来发出错误信号。相反,错误始终通过API函数返回的值发出信号。您需要查阅文档以了解每个函数如何报告错误。
如果您在GetDC()
等GDI函数中遇到失败,那么您可以做很多事情。在您描述的场景中,我将记录错误或将其报告给用户,然后终止执行。 GetDC()
的失败通常无法恢复。
每次调用API函数时检查错误的痛苦是我们有这么多框架包装低级API的原因之一。一个好的框架将为您进行错误检查并将任何错误转换为异常。使用一个好的框架可以让你专注于正常的执行流程,而不是在处理特殊情况的代码时乱丢你的代码。