COM 接口得到实现该接口的对象实例

参见http://www.wangchao.net.cn/bbsdetail_47176.html

 

外部调用Vote1.Base :=Base1.DefaultInterface;

 

Base属性设置为Read|Write|Write byref, Type 为Base*。

 

procedure TVote.Set_Base(const Value: Base);
var
   eEntry: PInterfaceEntry;
   eAutoObjFactory: TAutoObjectFactory;
begin
  FBase := Value;

  //得到类工厂
eAutoObjFactory:= TAutoObjectFactory(ComClassManager.GetFactoryFromClassID(CLASS_Base));
//得到接口标识的接口项
eEntry:= eAutoObjFactory.DispIntfEntry;
//IOffset为接口的偏移地址,eResource减去IOffset所得到的地址就是对象实例
FTBase:= TBase(Integer(FBase)-eEntry.IOffset);

 

  if FTBase <>nil then
    FTBase.OnTimerOK :=eveTimeOK

  else
    FTBase.OnTimerOK := nil;
end;

 

发布了45 篇原创文章 · 获赞 1 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章