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

标签 .net string com rcw

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

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

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

最佳答案

这两种字符串类型根本不相关。必须进行转换才能将一种类型转换为另一种类型。

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

关于.net - COM 字符串 (BSTR) 和 .NET 字符串有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419108/

相关文章:

.net - 将未使用的默认程序集留在引用文件夹中不好?

c# - 在 winform 应用程序的数据 GridView 中添加上下文菜单

.net - 是否有等效于 Python 的 enumerate() for .NET IEnumerable

Python:将十六进制转换为字符串

exception - ole32.dll 导致 GPF。如何解读DebugDiag报告?

c# - 如何以编程方式更改默认音频输入设备

c - 输入 : a2b3c4 and Output: aabbbcccc

java - String.indexOf() 找不到 System.lineSeparator();

c++ - 什么时候重新分配 `[in,out]` 参数是可选的?

asp.net - COM 异常 - TYPE_E_CANTLOADLIBRARY?