C#中_bstr_t的等价物是什么
我正在开发一个项目,我需要将C ++代码转换为C#。
我在代码中遇到_bstr_t
我想知道C#中的等价物。
_bstr_t
类是BSTR
类型的包装器。 这是OLE Automation中的一个字符串,它跨语言标准化。
也就是说,.NET中的等效类型是System.String
。
关键是在与它交互时(或在.NET代码中为COM interop定义接口)时,您需要使用MarshalAsAttribute
和UnmanagedType
枚举 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);