我正在开发一个需要将 C++ 代码转换为 C# 的项目。
我在代码中遇到_bstr_t
了我想知道 C# 中的等效项。
该类是type_bstr_t
的包装器。这是OLE 自动化中跨语言标准化的字符串。BSTR
也就是说,.NET 中的等效类型是System.String
.
关键是在与之交互时(或在 .NET 代码中为 COM 互操作定义接口),您需要使用枚举中MarshalAsAttribute
的值,如下所示:UnmanagedType
UnmanagedType.BStr
// This is on an interface that is in unmanaged code.
public void DoSomething([MarshalAs(UnmanagedType.BStr] string myString);
请注意,如果您的类实际上是_bstr_t
在 COM 接口中公开 ; 那么您应该将其更改为公开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);