Delphi下的COM编程技术简介
http://tech.ddvip.com 2006年07月30日 社区交流
本文详细介绍Delphi下的COM编程技术简介
引用汁数这种机制也带来?个问题,就是调用AddRef()和Release()不能出现混乱。一旦出现混乱,可能导致接口对象水远不被删除或者过早地被删除。
虚拟方法表
COM是个二进制规范,任何开发环境只要遵守这个规范都可以生产出COM对象。COM采用一种称为虚拟方法表的文法来解决方法调用。不过,COM接口与Objetc Pascal的类还是行-?些区别的:COM接口中凡是要表露给客户的方法必须声明为纯虚的,客户得到的只是指向虚拟方法表的指针,具体实现接口的是接口对象。
如果建立了同一个COM对象的多个实例,则虚拟方法表是共享的.但每个实例的数据是私有的。在DELPHI种,用abstract指示字来声明纯虚方法。例如:
TMyPureVirtualClass=class
public
procedure MyMethod;virtual;abstract;
…
end;
IUnknOwn接口
正如TObjetc是所有类的祖先一样,IUnknown是所有接口的祖先。这样,凡是取得了接口对象指针的客户总是能访问COM对象的核心服务,诸如AddRef(),Release()和QueryInterface(),这三个核心服务管理着接口对象的生存期。AddRef()和Release()比较简单.都没有参数。而QueryInterface()则比较复杂,它有两个参数:一个是IID参数,用于指定要查询的接口;另一个是Obj参数,用于返回找到的接口对象的指钉;如果COM对象不支持所查询的接口,则Obj参数将返回nil。
AddRef()和Release()前均加了下划线前缀,这是为了更加醒目。过去,COM对象必须自己维护引用计数,也就是说,必须调用AddRef()和Release()来把引用计数加1或减1。COM的另一个核心服务QueryInterface()也是不可缺少的,客户只有调用QueryInterface()才能申请到另一个接口指针。由于采用了ActiveX框架,所以引用计数是有TComObject对象自动维护的,应用程序不再需要直接与IUnknown接口打交道。
作者:cindy 责编:豆豆技术应用