COM字符串(BSTR)和.NET字符串之间有什么区别?

时间:2011-06-21 00:34:20

标签: .net string com rcw

是否只是字节组合以“编码”数据的方式?

我很好奇,因为我想知道RCW如何自动获取.NET字符串并将其转换为COM BSTR。我猜它只是形成一个从.NET字符串转换而来的有效COM BSTR。

相关:我可以使用.NET中的字节类型构建自己的有效BSTR吗?

1 个答案:

答案 0 :(得分:9)

两种字符串类型完全没有关系。必须进行转换才能将一种类型转换为另一种类型。

BSTR有许多约定必须遵循,包括通过SysAllocString *分配,使用SysFreeString解除分配​​,具有长度前缀和两个空字符的终结符。

http://msdn.microsoft.com/en-us/library/ms221069.aspx

<。> .Net字符串是通过托管堆分配的托管类型。它的生命周期由CLR垃圾收集器管理。

要构建自己的BSTR,使用Marshal.StringToBSTR会好得多:

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtobstr.aspx

如果这还不够好,你可以对SysAllocString进行调整:

http://msdn.microsoft.com/en-us/library/ms221458.aspx