接口代理文件

接口代理文件 (U_p.c) 是一个 C 文件,其中包含与对象 (COM) 接口的客户端存根和服务器存根文件中的例程等效的例程。 此文件包含编译器内联模式下客户端和服务器的代理例程的实现或解释模式中的等效数据和 thunk,以及其他适当的 COM 粘附数据(如代理和存根 Vtable)。

接口代理文件包括仅支持当前 IDL 文件中定义的接口方法的例程和数据。 为了阐明此行为,本部分使用了扩展示例。 使用从 IFaceA 继承的接口(例如 IFaceB)编译 IDL 文件时,会将 IFaceB 相关的辅助数据和例程生成到当前代理文件,而基接口 IFaceA 相关辅助数据和例程在从包含 IFaceA 定义的 IDL 文件生成的代理中找到。 编译器生成标识基接口代理项所需的所有数据,并在需要时委托给它们以支持通过 IFaceB 接口使用的 IFaceA 方法。

对于当前 IDL 文件中接口中的每个方法,代理文件在混合模式下编译时包含以下两个代理项方法 (/Os) ,在解释器模式下编译时包含等效的解释器数据 (/Oi) 。

  • 客户端代理项,例如此示例中的IFaceB_Method_Proxy。

    此客户端代理项是客户端(例如 IFaceB::Method)调度到的虚拟入口点。 它将输入参数封送为可传输形式,传输封送的参数以及标识接口和操作的信息,然后在调用的操作返回时取消对返回值和任何输出参数的封送。

  • 服务器端代理项,例如,IFaceB_Method_Stub 。

    此服务器端代理项是基础运行时在服务器上调度的虚拟入口点,以模拟客户端。 它将取消对输入参数进行封存以复制客户端数据,调用服务器的接口函数实现,然后封送并将返回值和任何输出参数传输回客户端。

从 file.idl 生成的代理文件的默认名称为 file_p.c.使用 /proxy MIDL 编译器开关替代接口代理文件的默认名称。 /env/out 开关会影响此文件。