inbound and outbound interface of COM
在arcengine的对象模型图学习时遇到一个 Inbound 和outbound interface区别的问题,对此进行了一定的认识,希望能够抛砖引玉:
遇到这个问题,多半是没有学习过com编程的人,如需深入学习,请学习c++的com方面的知识!
具体区别如下:
COM 所建立的是一个软件模块与另一个软件模块之间的链接, 当这种链接建立之后, 模块之间就可以通过被称之为Interface“接口 ”的机制来进行通信。在绝大部分情况下, 客户应用程序与组件的通信过程是单向的, 客户创建组件对象, 然后客户通过接口调用对象所提供的功能, 在适当的时候再把对象释放掉。在这种交互过程中, 客户总是主动的, 而组件总是处于被动状态, 通过自身暴露给客户的接口监听客户的请求, 一旦接收到客户的请求便做出反应,这样的接口称为入接口incoming interface。对于一个全面交互过程来说, 这样的单向通信往往是不能满足实际的需要, 组件对象也要主动与客户进行通信, 因此, 与入接口相对应, 对象也可以提供出接口outgoing interface 也叫回调接口, 对象通过这些出接口与客户进行通信。之所以把这些接口称为出接口, 其原因在于这些接口并不由 COM服务器端的对象实现, 而是由客户程序来实现, 客户实现这些接口, 并把接口指针通过一定的手段传给服务器, 以后服务器端就利用此接口指针与客户进行通信, 服务器端调用此接口的成员函数, 即调用了客户自定义的函数, 这时组件对象变成了客户端的客户, 可见在 com规范中, com组件对象提供服务客户调用服务, 这种对象与客户之间的关系是相对的。
转http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=62821&highlight=inbound%2Binterface
接 口编程可以认为是b/s架构的,对于入接口,我们在客户端声明一个对象,然后调用接口的方法即可,这些方法是在客户端实现的,我们不用考虑,但是这样的交 互,我们是主动地,还有一类接口就是出接口,方法由我们实现,然后是服务器调用,也就类似回调函数一样,对于事件可以这么认为,因为对于一个事件的操作, 每个人都有不同的实现,因此这个方法不能由服务器实现,否则,就千篇一律的,哈哈,个人见解,看下面的图:
![](http://hi.csdn.net/attachment/201110/31/0_13200610654BZ7.gif)