将空的BSTR(空WCHAR *指针)作为一个空string处理,并相应地devise处理BSTR的所有代码是至less普遍的做法。 这个问题的答案说相同。
这种做法在哪里logging? 是否有任何官方文件描述这个约定?
如果一些参数只是inttypes,ShellExecute不起作用
专门用于Windows的java库
为什么COM +忽略公寓线程模型?
是否有任何理由不在COM +应用程序中托pipeCOM服务器?
Microsoft Windows Office Suite之间的Java连接?
那么这个问题被接受的答案中给出的链接是Eric Lippert的一篇Eric的“BSTR语义完全指南” 。 虽然肯定不是官方文档,但Lippert是COM方面的权威(特别是在脚本领域)。
然而, 官方文件有这样的说法:
没有数据元素的BSTR是一个空的BSTR或一个NULL BSTR。 一个空的BSTR表示一个存在的,但长度为零的数据值。 NULL BSTR表示不存在的数据值。
所以,他们都是BSTR ,没有数据元素,但是语义略有不同(尽管没有什么可以说这两种情况需要在应用程序中以不同的方式处理)。 在这种情况下,我肯定会遵循Lippert的建议,一致地对待他们。 对我来说,他在实际工作中的实际经验比BSTR正式文档中的一句话更重要。
迈克尔·伯尔给出了我认为应该被接受的答案。 不幸的是MSDN中的BSTR页面没有记录这种做法。
另外,您可以从MSDN文档中的这些页面推断出这种行为:
SysFreeString页面报告,如果bstr为null则函数简单地返回。
SysstringLen页面报告,为bstr参数传递一个null字符串长度返回零。
SysstringByteLen页面报告相同的行为; null表示零长度。
但是,文档不完整:
SysReAllocString没有提到如果*pbstr为null会发生什么。
SysReAllocStringLen没有提到如果*pbstr为null会发生什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。