COM構造化ストレージの IStream 生ポインタを C# 側に引き渡す
COM の構造化ストレージのストリームインターフェースであるIStream を生ポインタで持っているとして、 それをC#側からアクセスしたい時。
.NET には、ネイティブのIStream インターフェースに対応する System.Runtime.InteropServices.ComTypes.IStream がある。
IStream の生ポインタを ComTypes.IStream に変換するには、System.Runtime.InteropServices.Marshal.GetTypedObjectForIUnknown メソッドを使えば良い。
C++/CLIのコード例
using namespace System; using namespace System::Runtime::InteropServices; ... IStream *pStream = NULL; // ... IStreamのポインタをどうにかして生成... // ComTypes::IStream へ変換 ComTypes::IStream^ stream = (ComTypes::IStream^)Marshal::GetTypedObjectForIUnknown( (IntPtr)pStream, ComTypes::IStream::typeid ); }