【发布时间】:2017-09-18 09:38:47
【问题描述】:
在Delphi中,我如何找出COM方法的地址? 我可以硬编码偏移量
//0 is the offset of the QueryInterface method
p := TPonterArray(pointer(SomeInterface)^)[0];
但我更喜欢使用符号名称。以下显然不起作用:
var M : TMethod;
...
M := TMethod(SomeInterface.QueryInterface);
谢谢!
【问题讨论】:
-
Delphi 带走了很多血腥的 COM 细节,我认为你自己想做的太多了。你想达到什么目的?制作自己的 COM 服务器还是使用现有的?
-
是否要接口中方法的数字偏移量(如IUnknown.QueryInterface为0),实现该接口方法的类中方法的地址(如@TInterfacedObject.QueryInterface ),或者生成的存根代码的地址,以将接口调用链接到相应的对象方法?后者存储在类的接口表中。
-
@The_Fox:两者都不是:我正在使用 Win32Hook.pas 拦截对外部 COM 对象的调用。 @Rob Kennedy:没有 TInterfacedObject 类 - 我只有一个由外部 dll 实现的接口。