CreateCompatibleDC -> CreateCompatibleBitmap -> SelectObject -> BitBlt -6ren">
gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:18:03 24 4
gpt4 key购买 nike

最近我正在更新一些用于使用 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/

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