代理存根学习笔记

本文介绍了代理存根在COM组件进程间通信中的作用,通过取款机的例子阐述其透明性和工作原理。代理对象与存根代码负责跨进程调用,列集和散集处理参数,以及详细步骤创建代理存根DLL,包括使用MIDL工具生成相关源代码并注册组件。
摘要由CSDN通过智能技术生成

什么是代理存根

打个比方,你到自动取款机上去取款;你就是客户,取款机就是你的代理;你不会在乎钱具体放在那里,你只想看到足够或更多的钱从出口出来(这就是com的透明性)。你同银行之间的操作完全是取款机代理实现。你的取款请求通过取款机,传到另一头,银行的服务器,他也没有必要知道你在哪儿取钱,他所关心的是你的身份,和你取款多少。当他确认你的权限,就进行相应的操作,返回操作结果给取款机,取款机根据服务器返回结果,从保险柜里取出相应数量的钱给你。你取出卡后,操作完成。取款机不是直接同服务器连接的,他们之间还有一个“存根”,取款机与存根通信,服务器与存根通信。从某种意义上说存根就是服务器的代理。

Com组件进程间通信

客户程序创建了组件对象之后,它通过接口指针调用组件对象的成员函数,但实际上,接口指针所指的是本进程中的代理对象(proxy),客户调用的是代理对象的成员函数,由代理对象通过跨进程的调用方法(LPCRPC)与对象进程中的存根代码(stub)通信,存根代码再调用组件对象成员函数。函数返回的顺序刚好相反,由组件对象,经过存根代码和代理对象,最后返回到客户程序。在这个交互过程中,可以看到,所有跨进程的操作完全由代理对象和存根代码包揽了

列集与散集

提到进程间通信,就离不开列集与散集。列集是指客户进程可以透明地调用另一进程中的对象成员函数的一种参数处理机制。代理对象用列集手段处理成员函数的参数,通过列集(marshaling )处理后得到一个数据包(数据流),然后通过一种跨进程的数据传输方法,当数据包传输到对象进程后,存根代码用散集(unmarshaling,列集的反过程)的方法把数据包参数解译出来,再用这些参数去调用组件对象;当组件对象成员函数返回后,存根代码又把返回值和输出参数列集成新的数据包,并把数据包传到客户进

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值