我正在开发一个项目,我需要将C ++代码转换为C#。
我在代码中遇到_bstr_t
我想知道C#中的等价物。
答案 0 :(得分:8)
_bstr_t
class是BSTR
type的包装器。这是OLE Automation中的一个字符串,它跨语言标准化。
那就是说,.NET中的等价类型是System.String
。
关键是在与它交互时(或在.NET代码中为COM互操作定义接口)时,您需要使用MarshalAsAttribute
UnmanagedType
enumeration 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
上的方法用于处理{{1}}个实例的分配和使用。
答案 1 :(得分:0)
如果您只是转换代码,请使用string
如果您通过PInvoke 与接口,则可能将参数解析为字符串,并将[MarshalAs(UnmanagedType.BStr)]
放在参数声明的前面:
[DllImport("OldCLib.Dll")]
public static extern void PassBStr([MarshalAs(UnmanagedType.BStr)] string s);