C#中_bstr_t的等价物是什么

我正在开发一个项目,我需要将C ++代码转换为C#。

我在代码中遇到_bstr_t我想知道C#中的等价物。

_bstr_t类是BSTR类型的包装器。 这是OLE Automation中的一个字符串,它跨语言标准化。

也就是说,.NET中的等效类型是System.String

关键是在与它交互时(或在.NET代码中为COM interop定义接口)时,您需要使用MarshalAsAttributeUnmanagedType枚举 UnmanagedType.BStr ,如下所示:

 // This is on an interface that is in unmanaged code. public void DoSomething([MarshalAs(UnmanagedType.BStr] string myString); 

请注意,如果您的类实际在COM接口中公​​开_bstr_t ,那么您应该将其更改为公开BSTR ; _bstr_t是一个辅助类,不应跨接口边界公开。 BSTR用于此, _bstr_t上的方法用于处理BSTR实例的分配和使用。

如果您只是转换代码,请使用string

如果您通过PInvoke与C ++代码连接,您可能会将参数解析为字符串并将[MarshalAs(UnmanagedType.BStr)]放在参数声明的前面:

 [DllImport("OldCLib.Dll")] public static extern void PassBStr([MarshalAs(UnmanagedType.BStr)] string s);