在哪里使用null BSTR记录?

sha*_*oth 5 windows com interop bstr com-interop

至少通常的做法是将null BSTR(null WCHAR*指针)视为空字符串,并相应地设计所有操作BSTR的代码.这个问题的答案也是这样说的.

这种做法记录在哪里?有没有描述这个惯例的官方文件?

Mic*_*urr 6

好吧,在该问题的公认答案中给出的链接是Eric Lippert的文章,Eric的BSTR语义完全指南.虽然它绝对不是官方文档,但Lippert是COM的知名权威(特别是在脚本领域).

但是,官方文档有这样的说法:

没有数据元素的BSTR是空BSTR或NULL BSTR.空BSTR指示当前但零长度的数据值.NULL BSTR表示不存在的数据值.

因此,正式它们都BSTR没有数据元素,但语义略有不同(尽管没有什么可说的,这两种情况需要在应用程序中以不同的方式处理).在这种情况下,我肯定会遵循Lippert关于同样对待它们的建议.对我而言,他对实际实施工作方式的实际经验比官方BSTR文档中的一句话更重要.


Jar*_*aus 5

Michael Burr 给出了我认为应该被接受的答案。不幸的是BSTR,MSDN 中的页面没有记录这种做法。

此外,您可以从 MSDN 文档中的这些页面推断此行为:

  • SysFreeStringpage 报告 if bstrisnull函数只是返回。
  • SysStringLenpage 报告nullbstr参数传递 a 会为字符串长度返回零。
  • SysStringByteLen页面报告相同的行为;null表示零长度。

但是,文档并不完整: