参见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;