【问题标题】:Why use Windows defined data types?为什么使用 Windows 定义的数据类型?
【发布时间】:2012-05-11 23:45:41
【问题描述】:

我最近一直在做一些 Winsock 编程。我在 Windows SDK 中做的事情不多。我从小就没有构建过真正的 Win32 应用程序,当时我没有考虑过,但现在我查看了一些已定义的类型,它们只是简单地包裹了与平台无关的其他类型,我想知道为什么有人当他们不需要时会使用它们。我看不出比使用 PSTR 或 DWORD 比使用本地对应部件有任何优势。在Winsock Reference 有一个页面列出了所有定义的structs and typedefs。他们将所有结构类型定义为大写字母,我不理解当设计 Windows SDK 的决定是像这样将所有类型定义为大写字母时试图完成的总体策略。

我不明白为什么有人,即使在 Windows 中编写代码,如果他们没有大写版本,也会使用大写版本,仅仅是因为如果将来需要的话,这似乎会使代码更难移植。我总是尽可能使用本机类型和原始 Winsock 结构。我试图做一些寻找这个问题的答案,但也许我想不出如何正确地表达一个查询。我错过了一些优势吗?谁能帮我解释一下?

【问题讨论】:

  • 有很多代码从 16 位移植到 32 位再到 64 位 Windows,只需要很少的更改。因为它依赖于这些 typedef。

标签: windows winapi


【解决方案1】:

优点是Windows SDK 中的typedefs 会根据需要进行调整。最近历史上最好的例子可能是DWORD_PTR,如果使用得当,它会在 x64 构建中开箱即用地表现正确,而您必须通过箍筋才能使其与您所谓的“本机类型”一起工作(即那些来自语言标准)。

还要记住,一些 Winsock 函数与原始 BSD 套接字函数并不完全对应。因此,出于遗留原因或简洁性,人为地将事物分开是有意义的。

对于某些未在语言标准中定义的 Win32 类型也是如此,因为它们会根据您的构建进行调整,例如 LPTSTR

最后但并非最不重要的一点是,如果您曾经从事过跨平台编程并且由于各种原因不能依赖来自 stdint.h 的(全部或部分)类型,您会喜欢 DWORD 这样的类型,因为它们暗示一定的宽度,这在与某个接口 (API) 对话时都是相关的。

【讨论】:

  • DWORD_PTR 是最糟糕的例子。加晚了。
  • @Hans:那你为什么不给一个更好的呢?这也是我的回答说“最近的历史”的原因:)
猜你喜欢
  • 2019-02-25
  • 2011-01-24
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多