Ale*_*tov 3 c 64-bit winapi bstr 32bit-64bit
似乎在64位平台上,有一个8字节长度的前缀是合理的.如果我们可以解决超过4Gb的内存,为什么不允许,比如5Gb字符串?答案只是"按规范"还是存在一些我不知道的互操作性/向后兼容性原因?谢谢.
的BSTR数据类型是标准COM字符串数据类型.更改长度前缀将使得无法在不同位数的进程之间安全地移动字符串(或者至少使其更加复杂).由于COM是唯一相关的跨位互操作基础结构,因此必须使BSTR32位进程和64位进程的行为方式相同.
这是一个权衡,强加2GB的"限制"以换取在不同位数的进程之间无障碍地编组字符串.
一个很好的理由是与平台API兼容,例如MultiByteToWideChar接受int长度.还有许多字符串API可以使用32位长度.
它实际上并不是一个真正的限制,因为我无法想象BSTR长度> 2GB的问题是解决问题的最佳方案.