c++ - 程序是否应该检查 "shouldn' t"但可以失败的 WinAPI 函数的失败?

标签 c++ winapi error-handling

最近我正在更新一些用于使用 GetWindowDC -> CreateCompatibleDC -> CreateCompatibleBitmap -> SelectObject -> BitBlt -> GetDIBits 系列 WinAPI 函数截屏的代码。现在我检查所有这些是否失败,因为它们有时会失败,而且确实会失败。但随后我必须通过删除创建的位图、删除创建的 dc 和释放窗口 dc 来执行清理。在我见过的任何示例中——甚至在 MSDN 上——相关函数(DeleteObject、DeleteDC可能失败。

这只是一个值得注意的例子,因为这些调用彼此相邻。但偶尔会有其他功能可以失败但实际上永远不会失败。如 GetCursorPos。或者仅在传递无效数据时才会失败的函数,例如 FileTimeToSytemTime。

那么,检查所有可能因失败而失败的函数是一种好习惯吗?或者有些可以不检查?作为推论,当检查这些应该永不失败的函数是否失败时,什么是正确的?抛出运行时异常,使用断言,还是其他?

最佳答案

是否测试的问题取决于如果失败了你会怎么做。大多数示例在清理完成后退出,因此验证正确的清理没有任何意义,在任何一种情况下程序都会退出。

不检查像 GetCursorPos 这样的东西可能会导致错误,但是根据避免这种情况所需的代码来决定您是否应该检查。如果检查它会在你所有的电话周围增加 3 行,那么你最好冒险。但是,如果您有一个宏设置来处理它,那么添加该宏以防万一也没什么坏处。

FileTimeToSystemTime 是否被检查取决于您传递给它的内容。来自系统的文件时间?忽略它可能是安全的。根据用户输入构建的自定义字符串?可能更好地确定。

关于c++ - 程序是否应该检查 "shouldn' t"但可以失败的 WinAPI 函数的失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5535115/

相关文章:

c++ - 在调整大小时 move 对话框上的按钮

vba - VBA Vlookup错误处理

asp.net - 哪一种更适合自定义错误: HTML or View

c++ - 成员初始化列表错误中的模板基构造函数调用

c++ - 每次调试此代码时,我都会收到 "subscript out of range error"。有人可以帮我查明错误或错误吗?

c++ - 局部数组变量的最大大小

c++ - HKEY 句柄为 NULL,在调试期间它写入未使用的<无法读取内存>

c++ - 监视 Windows 壁纸上的位置

javascript - Safari 中的 window.onerror (Javascript)

c++ - 基于堆栈缓冲区的STL分配器?