【问题标题】:Trying to understand structure sizes in the Windows API试图了解 Windows API 中的结构大小
【发布时间】:2021-12-06 22:28:58
【问题描述】:

我正在寻找使用 Windows API 构建应用程序。 我正在使用 Go,它可以用来与 Windows API 交互(通过使用 syscall 包),但是,这对于这个问题并不重要。

我正在查看用于注册新同步根的 API,这是使用函数 CfRegisterSyncRoot 完成的。

根据此方法的签名,它接受CF_SYNC_REGISTRATION,但在这里我发现了一些让我感到困惑的信息。

根据定义,该函数有一个名为StructSize 的字段,它表示结构的大小,但我没有找到更多关于此的信息。 我应该在这里传递什么?

【问题讨论】:

  • 在 Windows API 的许多其他部分中通常称为“cbSize”:stackoverflow.com/questions/189622/…
  • 您可能想问一个特定于语言的问题。 Go 可能有一种方法可以找到与 C 匹配的结构大小。

标签: windows winapi


【解决方案1】:

您链接到的文档说StructSize 成员是“结构的大小。”。这意味着它是用于将结构存储在内存中的字节数。您可以通过在 C 编译器中评估 sizeof(CF_SYNC_REGISTRATION) 来获得正确的值,并且您应该在将其传递给 Windows API 函数之前将此值写入 StructSize 成员。

这种事情在 Windows API 中很常见。我认为这是一种允许 Windows 偶尔向其结构中添加新成员的机制,而不会破坏与不了解新成员的旧代码的兼容性。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多