COM的接口指针指向的是COM类对象实例的VTBL(虚函数地址表),对VC编译的X86平台而言,指向VTBL的指针是COM类对象实例的数据成员(不可见的),在所有数据成员的(地址空间)前面

解决方案 »

  1.   

    老兄说的有点含糊,我想知道接口指针(不讨论列集接口指针)的具体情况,从C++中可以看看对象模型的客户(类使用者)和实现(类定义)之间的关系,也可以看到如何实现指向类对象的this和指向类实例的this如何分别实现的。在COM中情况变的很特殊,类定义者和类使用者分开,类对象的this可以通过vtbl维护,但类实例的this就很困难了,更重要问题是类实例到底是在客户端还是服务端的内存中,还是各有一个?都都来关注啊~-~!!!
      

  2.   

    当客户和服务在不同进程中时,客户得到的指针是指向代理接口的。代理也是一个组件,
    接口函数和服务组件形式一样,但函数实现不同,它用来调整函数参数,然后用lpc调用
    服务端的残根dll中的对应函数,由该函数反调整函数参数,再调用真正函数。
    对于lpc原理,我认为是通过int xxh通过调用门或中断门转到内核,内核再实现进程
    切换,调用服务进程的函数。其中内核如何得到残根的函数地址,我不明白,残根dll
    的函数应该都是export出来的吧,(我去dumpbin一下)也许是分析dll文件头(装dll时有登记所有信息)得到逻辑地址,再加装dll时的偏移得函数地址。其它关于系统如何保存寄存器内容,切换TSS等等细节,一想头都大了。
    我认为接口等于纯抽象基类,当然没有变量在this指针指向的空间的周围了.
    不同编译器放vtp的地方不同,C++this指针指向的应该一定是实例变量和vto所处的空间的首地址吧,com中接口this指向的是vto,因为没有变量。
    以上只是我的看法。我汇编不好(读起来都要吐),想分析系统有心无力,等大2下学期真正学汇编再搞,现在你干吧。有关于lpc,rpc的资料麻烦给一点:
    [email protected].
    很需要你的指教。
    thx.