定义封送处理类型

更新:2007 年 11 月

在生成封送拆收器之前,必须定义所封送的托管和非托管接口。这些接口通常执行相同的功能,但以不同的方式向托管和非托管对象公开。

托管编译器将从元数据中生成托管接口,所得的接口看起来与其他任何托管接口都相似。下面的代码示例显示一个典型的接口:

#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++ 定义。

请参见

概念

实现 ICustomMarshaler 接口

使用替换封送拆收器

其他资源

自定义封送处理