语境: 我正在尝试使用 Delphi 应用程序中的一些 COM 接口(Direct2D 1.1)。 为此,我必须将接口移植到 Delphi。 我已经这样做了,但是其中一个接口有问题:我调用的方法不正确。 我通过在 C++ 和 Delphi 中编写完全相同的代码来验证这一点。 在调试器下运行两者,我看 ...
语境: 我正在尝试使用 Delphi 应用程序中的一些 COM 接口(Direct2D 1.1)。 为此,我必须将接口移植到 Delphi。 我已经这样做了,但是其中一个接口有问题:我调用的方法不正确。 我通过在 C++ 和 Delphi 中编写完全相同的代码来验证这一点。 在调试器下运行两者,我看 ...
鉴于: 例子.h 例子.cpp 假设我想从“scratch”创建一个Derived的实例。 由于它包含来自Base的虚拟 function,我将如何获取其虚拟 function 表的地址,以便我可以执行以下操作: 主文件 这个编译器是特定的吗? 如果是这样,如果有人熟悉它,我正在使用 MinGW。 ...
我能以某种方式在 FREE Pascal 中看到 VMT 表吗? 如果 VMT 表在通过遗传连接的两个对象中具有相同数量的项目,我很感兴趣? 例如,在这个 model 中,VMT 表中会有什么? 所有功能或更多功能是否会有一张表( [Ob1 AND Ob2] 之间的表格和 [Ob2 AND Ob3 ...
我通过分析用Visual C ++编写的简单程序的二进制文件(具有一些优化功能)来学习虚函数表及其表示。 几天前,当我被困在虚拟方法表内容上且COMDAT折叠相同时,我问了这个问题 。 现在,我陷入了其他困境:每当我分析一个类时,都需要找到其虚拟方法表。 我可以通过找到其RTTIT ...
我正在浏览一个简单的C ++ Windows程序(我没有源代码,只有二进制文件)的VFT(VMT),这些程序是由Visual Studio编译并进行了某种优化的。 我注意到这是使用继承和多态性。 我找到了程序具有的每个类的struct s_RTTIBaseClassArray的位置。 ...
使用Visual C ++编译器,每个类对象都有VMT (对象中的第一个指针), VMT是指向类中每个方法的指针数组的指针。 使用如下代码: 该代码枚举了类中的前100个函数,但是考虑到我没有类定义,我如何确定那些指针类有多少个呢? 如何动态找到它? 谢谢! ...
VMT以正偏移量存储指向所有用户定义的虚拟方法的指针。 我需要编写一些代码来挂接VMT。 我这样做的方法是获得一个指向祖先类中的虚拟方法的指针。 假设: TCustomForm.ShowModal 。 然后,我在TCustomForm的VMT中TCustomForm偏移量。 有了这 ...
是否有可能(以及如何)获得虚方法表中虚函数的索引? 我知道foo是虚拟方法表中的第一 (0) 项 但是我可以有foo并得到 0 吗? ...
我通过取消引用直到在该方法的指针之前在vmt上调用虚拟方法。 一切都很好,但是我将如何完全更改对象上VM表的指针? 例: PP A; //指向其默认VM表 PP B; //指向完全不同的VM表 A-> MethodOne()//如上所述调用 ...
我有3个班级(Cat,HouseCat:Cat,Lion:Cat)。 我要做的是更改HouseCat的VTable,使HouseCat吃肉而不是猫食。 我使用的课程: 我试图通过我创建的VTable结构来编辑这些类的VTable条目。 我确认VTable [0] = ea ...
我想做的是获取没有实例的类中的字段列表...例如: 我无法从VMT获取fieldTable: 这样我就不会得到字段列表 欢迎任何帮助,在此先感谢 ...
我有功能(用Delphi 7,32位编写): 哪个返回VMT地址(我认为它是VMT,我不确定)并检查参数是否是一个对象(通过try...except ,这是非常糟糕的解决方案)。 我有两个问题: 1)这真的是VMT地址还是我错了? 2)有没有更好的解决方案来检查参数是否为对象 ...
我是一个使用Delphi 2007用于更大应用程序的团队的成员,我们怀疑堆损坏,因为有时会有奇怪的错误,没有其他解释。 我相信编译器的Rangechecking选项仅适用于数组。 我想要一个工具,当存储器地址没有被应用程序分配时,它会发出异常或日志。 问候 编辑 :错误类型: ...
System.pas文件包含有关硬编码VMT偏移量的大量信息,但实际上似乎并未真正说明VMT本身的结构。 我真正想知道的是,有没有办法在运行时找出VMT的大小,或者换句话说,给定类有多少虚拟方法? ...