接口带来了什么?(100分)

  • 主题发起人 主题发起人 softdog
  • 开始时间 开始时间
S

softdog

Unregistered / Unconfirmed
GUEST, unregistred user!
说来惭愧,学COM/COM+很久了,但有一个问题不明白:
比如:
var
v: Variant;
begin
v := CreateRemoteComObject('Server', ProgIDToClassID('RDM.Orders'));
...
end;
在这里,用CreateRemoteComObject取得一个接口后(不知道这样的叫法是否正确),它到底
赋值给v什么东西了?是一个地址?还是一段二进制代码段?还是其他?
 
小弟不才,这个问题我也不知道,
我想可能是建立一个指向COM对象的地址吧
 
可是如果是DCOM的话,那个地址指向哪里呢?
 
接口就是指针
该指针指向对象的Vtable
所有对方法的调用都通过该接口指针
有些语言对Vtable不支持,所以先返回Idispatch,该接口通过对方法的硬编码来实现对
对象中方法的调用
 
ideafrog:
什么是“方法的硬编码”?

是不是这个:
如果是从IUnknown继承的接口,在客户端调用的时候,先加载服务器(dll),然后将服务器
中具体方法的代码段映射到内存中,然后传递给客户端相应的地址。
如果是从IDispatch继承的接口,在客户端调用时,服务器会把具体的代码传递给客户端。
双重接口就是集这两种方式的有点,如果是支持VTable的客户端调用,它就返回地址;如果
是脚本类的客户端调用,它就返回具体的代码?

(注:这里的客户端和服务器指广义的客户端和服务器)
 
正在学COM,订个邮件知道先。
 
自己看书
 
后退
顶部