看了关于IMarshal 和 GIT的介绍 有几个问题请教:  我理解COM的特点就在于巧妙的把对象和接口分离开来 形成一种可复用的标准 而IMarshal接口实际上实现了对象的跨进程传递 我不明白的就是怎么有个GIT ? 这个GIT是哪里来的 ? 是哪里实现的? 没它在实现IMarshal接口的条件下一样不影响COM对象的访问啊 而且这个GIT怎么就可以保证传递的局部指针是有效的呢?不明白 请高手指点 多谢

解决方案 »

  1.   

    IMarshal接口实际上实现了对象的跨进程传递--这句话应该说成imarshal实现了对象的接口的跨套间(apartment),git应该是一张表,这个在《com本质论中》应该描述的比较清楚,偶有点忘了。
      

  2.   

    刚刚看了些COM 说说我的理解 :
    首先:GIT和Marshal的目的是一样的,都是要实现接口对象跨进程传递。
    他们的不同在与使用的方法:Marshal是序列化接口对象,使用以下两个接口函数:
    MarshalInterface()和UnmarshalInterface()(可以查看MSDN)。要求是必须实现IMarshal接口
    Class Itr : public IMarshal .....
    { ........ }
    GIT是全局接口表 在本套间可以将接口指针注册在GIT中 然后在套间外程外从GIT中散列接口指针,这就是所谓的FTM.它的好处就在于你可以不必关心你不需要的东西,而关注实现就行。