マーシャリング型の定義
更新 : 2007 年 11 月
マーシャラを構築する前に、マーシャリングするマネージ インターフェイスとアンマネージ インターフェイスを定義する必要があります。これらのインターフェイスはどちらも同じ機能を実行しますが、マネージ オブジェクトとアンマネージ オブジェクトには、それぞれ異なる方法で公開されます。
マネージ コンパイラは、メタデータからマネージ インターフェイスを生成するので、生成されたインターフェイスは、他のマネージ インターフェイスと同様の外観を持ちます。代表的なインターフェイスのコード例を次に示します。
#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++ 定義が含まれています。