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

ric*_*ard 5 .net string com rcw

它只是字节组合以"编码"数据的方式吗?

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

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

jon*_*ham 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

  • 是的,所有数据都只是字节;-).问题是谁分配/解除分配这些字节,以及布置这些字节时使用的约定.例如,在分配BSTR时,您实际上并未检索指向已分配内存开头的指针.您的指针在分配的空间中是4个字节,因为前四个字节存储了字符串的长度. (2认同)