在开发COM+的时候,我定义了两个接口:IParent, IChild如下: IParent = interface(IDispatch)
procedure Method1; safecall;
end;
IChild = interface(IParent)
procedure Method2; safecall;
end;
其中IChild是由TChildObject类实现,并有对应的CoClass. TParentObject = class(TMtsAutoObject, IParent)
protected
procedure Method1; safecall;
end; TChildObject = class(TParentObject, IChild)
protected
procedure Method2; safecall;
end;
在类型库编辑器里,为IChild增加一个Method3,
在Delphi5里,刷新后记得是这样的:
TChildObject = class(TParentObject, IChild)
protected
procedure Method2; safecall;
procedure Method3; safecall;
end;
在Delphi6里,又把Method1加了一遍,成了:
TChildObject = class(TParentObject, IChild)
protected
procedure Method1; safecall;
procedure Method2; safecall;
procedure Method3; safecall;
end; 由于我的COM对象好多个,其中很多可以有共同的特性,所以用
一个相应的父类来实现那些共同的特性方法,可每次增加一个新方法或属性,
刷新后就把所有接口方法又加一次,虽然可以手工删除掉就可以了,
可还是很麻烦,因为组件太多了有什么好办法?有什么设置?搞不懂,为什么Delphi5可以,Delphi6,7又不可以了……
procedure Method1; safecall;
end;
IChild = interface(IParent)
procedure Method2; safecall;
end;
其中IChild是由TChildObject类实现,并有对应的CoClass. TParentObject = class(TMtsAutoObject, IParent)
protected
procedure Method1; safecall;
end; TChildObject = class(TParentObject, IChild)
protected
procedure Method2; safecall;
end;
在类型库编辑器里,为IChild增加一个Method3,
在Delphi5里,刷新后记得是这样的:
TChildObject = class(TParentObject, IChild)
protected
procedure Method2; safecall;
procedure Method3; safecall;
end;
在Delphi6里,又把Method1加了一遍,成了:
TChildObject = class(TParentObject, IChild)
protected
procedure Method1; safecall;
procedure Method2; safecall;
procedure Method3; safecall;
end; 由于我的COM对象好多个,其中很多可以有共同的特性,所以用
一个相应的父类来实现那些共同的特性方法,可每次增加一个新方法或属性,
刷新后就把所有接口方法又加一次,虽然可以手工删除掉就可以了,
可还是很麻烦,因为组件太多了有什么好办法?有什么设置?搞不懂,为什么Delphi5可以,Delphi6,7又不可以了……
在Delphi5里可以自动判断一个接口方法是否由父类实现了
如果已经有父类实现了这个方法,那么在刷新时就不再在
子类里加了,就象上面我说的Method1。而在Delphi6,7里不管3721,把接口应该具备的所有方法都加在了
子类里。
那在接口实现的单元里如果不写Child从Parent继承的Method1的实现代码,编译会出错吗?
因为Child会自动从Parent继承方法和属性,所以实际上Child调用Method1的时候,也会自动从Parent调用实现代码(而不是什么都不干)。当然,如果你如果重载(Override)了Method1,程序才会执行你的重载代码。
所以我觉得你只要不需要重载那些方法而编译又没有报错的话,你可以不管那些自动生成的东西。
因为自动生成后,虽然我们可以不写实现代码,但是不写实现代码的“空实现”也是
实现,我觉得在调用时应该还是调用的是“空实现”的实现,就是什么都不干。
而且我已经试过了 :)不过我的这个问题已经知道怎么解决了,就是一个选项:
在Tools -> Environment Options -> Type Library页里的下面有选项:
Display updates before refreshing
这样在刷新时可以自己选择刷新还是不刷新,就解决了,虽然每次新加方法都要选一次
不过我觉得这种方式应该比Delphi5的方式还是要好一些。最后, hthunter(核桃) ,我还是非常感谢你
说实话
我每次在CSDN提的问题基本上很少有人来参与
你是我遇到的最热心的一个,哈哈
所以我把分都给你 :)嗯,我的分很多,都不知道怎么弄出去,10000多分,我可没有那么多问题啊