如何通过阅读co-classs'es vtable获取函数地址的功能名称?

时间:2010-03-12 10:35:19

标签: com runtime vtable

我需要通过从COM公开接口方法的vtable读取其地址来调用co-class函数。我需要一些通用的方法来读取地址。

现在我需要调用函数,它具有我从TLB收集的特定地址(NOT KNOWN)参数(参数),以及名称。该地址的对应方式与我要调用的函数名称相对应。

为此,我需要遍历保存功能地址的vtable,最后需要与该功能的NAME对应功能地址。这是我不知道的。怎么样? vtable(Overloading case)中可能出现多个具有相同名称的函数。在这种情况下,我们需要区分函数名称w.r.t他们的地址。怎么解决? 问候 乌斯曼


尊敬的先生。!!

我正在设计一个单元测试框架,我需要提取某些COM Exe或COM DLL的所有函数签名以显示在网格或用户的任何接口中,以便稍后从该列表中选择某个函数签名,在将参数(数据作为参数)提供给该函数之后,他/她可以执行该函数。所有这些都将在运行时动态完成,运行时函数将被调用,无论用户想要什么。

这可以通过各种方式实现。

通过提供TLB(类型库),我们可以提取每个函数签名,并可以向Grid控件或Tree控件显示每个签名。第二步是通过提供数据在运行时调用这些函数。调用需要数据和函数(或名称)的地址。我会有一些GUI面板或控件,它将从用户获取数据,然后数据将成为参数。

现在我发布了真正的问题。调用由co-class实现的COM组件公开的接口的函数/方法。这需要追踪组件暴露的界面vtable,找到该功能的地址,然后需要知道我真的要去寻求功能吗?因此,这需要将该地址转换为函数名称然后比较一些字符串比较将决定它是否真的是从Tree Control中显示签名的USER CLICKED的函数名称。

建议或推荐?

1 个答案:

答案 0 :(得分:0)

为每个函数调用ITypeInfo::GetFuncDesc,并且您获得的FUNCDESC结构包含oVft成员中的vtable索引。将接口vtable转换为void **,并将其用作索引。

当然,为什么你需要这样做,我不知道:)