c - 为什么 BSTR 长度前缀在 64 位平台上是 4 个字节?

标签 c winapi 64-bit 32bit-64bit bstr

在 64 位平台上,使用 8 字节长度的前缀似乎是合理的。如果我们可以寻址超过 4Gb 的内存,为什么不允许,比如说,5Gb 的字符串?答案只是“按规范”还是存在一些我不知道的互操作性/向后兼容性原因? 谢谢。

最佳答案

BSTR 数据类型是标准的 COM 字符串数据类型。更改长度前缀将无法在不同位数的进程之间安全地移动字符串(或至少使其变得更加复杂)。由于 COM 是唯一相关的跨位互操作基础结构,因此有必要让 BSTR 以相同的方式对 32 位进程和 64 位进程进行操作。

这是一种权衡,施加 2GB 的“限制”以换取在不同位数的进程之间无障碍地编码字符串。

关于c - 为什么 BSTR 长度前缀在 64 位平台上是 4 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23098728/

相关文章:

c++ - 在保持透明背景的同时调整 HBITMAP 的大小

c++ - 函数调用中的 WriteConsole 访问冲突但不是来自 main()

c++ - msvcprtd.lib(MSVCP100D.dll): fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

c# - 访问 COM 时,如何在 x86 和 x64 下编写安全的 C# 代码?典型的陷阱?

c++ - 如何生成原始数据流?

将 int 转换为 char

c++ - 如何定义线程局部静态变量?

指针和 const char[] 的 C 错误

c - 说C是用C编译的是什么意思?

c++ - 我可以覆盖 C++/MFC 项目中全局定义的 API 吗?