マーシャリング型の定義

マーシャラーを構築する前に、マーシャリングするマネージ インターフェイスとアンマネージ インターフェイスを定義する必要があります。 これらのインターフェイスはどちらも同じ機能を実行しますが、マネージ オブジェクトとアンマネージ オブジェクトには、それぞれ異なる方法で公開されます。

マネージ コンパイラは、メタデータからマネージ インターフェイスを生成するので、生成されたインターフェイスは、他のマネージ インターフェイスと同様の外観を持ちます。 代表的なインターフェイスのコード例を次に示します。

#using <mscorlib.dll>
interface INew {
    void NewMethod();
}

インターフェイス定義語 (IDL: Interface Definition Language) にアンマネージ型を定義し、それを MIDL コンパイラでコンパイルします。 ライブラリ ステートメント内にインターフェイスを定義し、そのインターフェイスに汎用一意識別子 (UUID) 属性を持つインターフェイス ID を割り当てます。

Old.idl の中

[uuid(9B2BAADA-0705-11D3-A0CD-00C04FA35826)]
library OldLib {
     [uuid(9B2BAADD-0705-11D3-A0CD-00C04FA35826)]
     interface IOld : IUnknown
         HRESULT OldMethod();
}

MIDL コンパイラによって、複数の出力ファイルが生成されます。 インターフェイスを Old.idl 内に定義した場合、出力ファイル Old_i.c は、インターフェイスのインターフェイス ID (IID) を持つ const 変数を定義します。

Old_i.c

const IID IID_IOld = {0x9B2BAADD,0x0705,0x11D3,{0xA0,0xCD,0x00,0xC0,0x4F,0xA3,0x58,0x26}};

MIDL によって、Old.h ファイルも生成されます。 Old.h ファイルには、C++ ソース コードにインクルード (#include) できるインターフェイスの C++ 定義が含まれています。

参照

概念

ICustomMarshaler インターフェイスの実装

代替マーシャラーの使用

その他の技術情報

カスタム マーシャリング