2

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

我在代码中遇到_bstr_t了我想知道 C# 中的等效项。

4

2 回答 2

8

该类是type_bstr_t包装器。这是OLE 自动化中跨语言标准化的字符串。BSTR

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

关键是在与之交互时(或在 .NET 代码中为 COM 互操作定义接口),您需要使用枚举MarshalAsAttribute的值,如下所示:UnmanagedTypeUnmanagedType.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实例的分配和使用。

于 2012-11-06T18:08:45.090 回答
0

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

如果您通过 PInvokeC++ 代码交互,您可能会将参数声明为字符串并放在[MarshalAs(UnmanagedType.BStr)]参数声明的前面:

[DllImport("OldCLib.Dll")]
public static extern void PassBStr([MarshalAs(UnmanagedType.BStr)] string s); 
于 2012-11-06T18:14:51.853 回答