C++ コードを C# に変換する必要があるプロジェクトに取り組んでいます。
_bstr_t
私はC#で同等のものを知りたいコードに出くわしました。
_bstr_t
クラスはBSTR
typeのラッパーです。これは、言語間で標準化されたOLE オートメーションの文字列です。
つまり、.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);