C#中_bstr_t的等价物是什么

时间:2012-11-06 17:44:50

标签: c# c++ .net com-interop

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

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

2 个答案:

答案 0 :(得分:8)

_bstr_t classBSTR 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_tBSTR上的方法用于处理{{1}}个实例的分配和使用。

答案 1 :(得分:0)

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

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

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