【问题标题】:CreateDIBSection: Return value vs errorCreateDIBSection:返回值与错误
【发布时间】:2016-11-29 00:23:48
【问题描述】:

The documentation of CreateDIBSection 状态:

如果函数成功,返回值是新的句柄 创建 DIB,*ppvBits 指向位图位值。

如果函数失败,返回值为NULL,*ppvBits为NULL。

但是,紧接着它说:

此函数可以返回以下值 [...] ERROR_INVALID_PARAMETER

那么,最后一句话是什么意思?我很难想象它真的返回那个值(可能它实际上调用了SetLastError)。这是在某个地方彻底记录了吗?

【问题讨论】:

  • 看这个 - i.imgur.com/JV3VYcB.png - 来自 CreateDIBSection 文章的旧 MSDN (2008) 的屏幕截图。这里都正确
  • 有关于 GDI 函数错误的错误 MSDN 信息的历史记录。它当然不能同时返回 NULL 和 错误代码。最终这些信息没有用,GDI 函数总是因为参数无效而失败。因此,如果你得到 NULL,那么就假设这是出了问题。

标签: windows winapi


【解决方案1】:

这只是当前版本文档中的一个错误!

CreateDIBSection 始终返回 HBITMAP。如果函数失败,则返回0(NULL),你可以调用GetLastError。 GetLastError 将返回 ERROR_INVALID_PARAMETER。

这是所有 GDI 函数工作的标准方式,更不用说函数不可能同时返回 NULL 和错误代码这一事实。我还能够为这个函数挖掘一个旧版本的 MSDN 文档(大约 2008 年),它确认当前版本的在线文档确实是错误的:

【讨论】:

  • 我倾向于相信你,但你能以某种方式支持你的说法吗?
  • @phimuemue - 尽量少思考,不要盲目追随文档中的任何错误。
  • 也许我应该写下我已经怀疑您声称的内容。然而,我的问题的全部意义在于我想为这个假设找到一些支持。
  • 我有旧的离线 MSDN 2008 - 这是此功能文章的屏幕截图 - i.imgur.com/JV3VYcB.png
猜你喜欢
  • 2011-12-04
  • 2018-08-31
  • 1970-01-01
  • 2019-02-03
  • 2015-06-19
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
相关资源
最近更新 更多