0

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

现在我需要调用该函数,该函数将具有我从 TLB 收集的特定地址(未知)参数(参数),以及名称。该地址如何对应于我要调用的函数名称。

为此,我需要遍历保存函数地址的 vtable,最后需要将函数地址与该函数的 NAME 对应。这是我不知道的。如何?vtable 中可能会出现多个同名函数(重载情况)。在这种情况下,我们需要区分函数名称和它们的地址。如何应对?问候乌斯曼


尊敬的先生。!

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

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

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

现在真正的问题来了,我之前发布过。调用由 co-class 实现的 COM 组件公开的接口的函数/方法。这需要跟踪组件公开的接口的 vtable,找到该函数的地址,然后需要知道我要调用的地址真的是函数吗?因此,这需要将该地址转换为函数名称,然后进行比较,一些字符串比较将决定它是否真的是用户从树控件中单击的函数名称,显示签名。

建议或建议?

4

1 回答 1

0

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

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

于 2010-03-12T15:10:34.427 回答