定义封送处理类型
在生成封送拆收器之前,必须定义所封送的托管和非托管接口。 这些接口通常执行相同的功能,但以不同的方式向托管和非托管对象公开。
托管编译器将从元数据中生成托管接口,所得的接口看起来与其他任何托管接口都相似。 下面的代码示例显示一个典型的接口:
#using <mscorlib.dll>
interface INew {
void NewMethod();
}
您用接口定义语言 (IDL) 定义非托管类型,然后用 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 将用接口的接口标识符 (IID) 定义 const 变量:
在 Old_i.c 中
const IID IID_IOld = {0x9B2BAADD,0x0705,0x11D3,{0xA0,0xCD,0x00,0xC0,0x4F,0xA3,0x58,0x26}};
Old.h 文件也由 MIDL 生成。 它包含可 #included(包含)到 C++ 源代码中的接口的 C++ 定义。