问题标签 [vtable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
840 浏览

com - 如何迭代 COM coclass 的 vtable?

如何迭代/访问 COM coclass 的 vtable,它将实现其公开接口的方法?

我需要访问存储其接口的所有公开方法地址的 vtable 部分。

例如Math是COM对象,它暴露的接口是“Operations”,“Sum”是这个接口的方法,我如何得到“Sum”的地址?

0 投票
1 回答
996 浏览

com - 如何通过读取 co-classs 的 vtable 来获取函数名称和函数地址?

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

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

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


尊敬的先生。!

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

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

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

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

建议或建议?

0 投票
2 回答
7246 浏览

c++ - 使用 gdb 的 C++ 多态类中的 vtable

如何使用指向具有虚函数的基类对象的指针来显示 vtable?

0 投票
4 回答
3155 浏览

c++ - C++ 中的纯虚函数在哪里?

哪个虚拟表将是纯虚函数所在?在基类还是派生类?

例如,每个类中的虚拟表是什么样的?

0 投票
9 回答
41053 浏览

c++ - Qt 链接器错误:“未定义对 vtable 的引用”

这是我的标题:

这是我的课:

我收到链接器错误:

  • 这意味着我有一个未实现的虚拟方法。但是我的课上没有虚拟方法。
  • 我注释掉了向量,认为这是原因,但错误并没有消失。
  • Message是一个复杂的struct,但即使使用int而不是解决问题。
0 投票
2 回答
1119 浏览

c++ - C++ 是否有不使用 vtable 的接口的静态多态实现?

C++ 是否具有不使用 vtable 的接口的正确实现?

例如

最后一行对 func 的调用转到 vtable 以查找 BaseInterfaceImpl::func 的 func ptr,但是是否有任何 C++ 方法可以直接执行此操作,因为除了纯接口类 BaseInterface 之外,BaseInterfaceImpl 不是任何其他类的子类?

谢谢。吉尔。

0 投票
1 回答
317 浏览

c# - 为什么在获取 COM 函数地址时发生异常?

我通过加载类型库 (TLB) 并使用和迭代类型来获取 COM 函数的ITypeLib地址ITypeInfo。调用AddressOfMemberITypeInfo 的函数后,我面临以下异常:

System.Runtime.InteropServices.COMException (0x800288BD):操作的模块类型错误。(来自 HRESULT 的异常:0x800288BD (TYPE_E_BADMODULEKIND))在 System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember(Int32 memid,INVOKEKIND invKind,IntPtr& ppv)。

我该如何摆脱这个异常?

0 投票
1 回答
424 浏览

c# - How to Call COM unmanaged code at Runtime from C#.NET using ITypeLib and ITypeInfo?

I need to call unmanaged COM code from C#.NET. By loading unmanaged COM Type libraries from (LoadTypeLibEx), I am able to iterate over all exposed types by COM TLB. I need to know the addresses to call those exposed methods at runtime or by accessing the COM vtable's starting address and apply indexing for getting addresses of those exposed methods under interfaces.

0 投票
4 回答
3289 浏览

c++ - 速度比较 - 模板专业化 vs. 虚拟函数 vs. If-Statement

只是为了摆脱它...

Premature optimization is the root of all evil

Make use of OOP

etc.

我明白。只是寻找一些关于某些操作速度的建议,我可以将它们存储在我的灰质中以供将来参考。

假设您有一个动画课程。动画可以循环播放(反复播放)或不循环播放(播放一次),它可能有或没有唯一的帧时间,等等。假设有 3 个“非此即彼”属性。请注意,Animation 类的任何方法最多将检查其中之一(即,这不是 if-elseif 的巨大分支的情况)。

这里有一些选项。

1) 为上面给出的属性赋予布尔成员,并在播放动画时使用 if 语句检查它们以执行适当的操作。

  • 问题:每次播放动画时都会进行条件检查。

2)制作基础动画类,并派生其他动画类,如 LoopedAnimation 和 AnimationUniqueFrames 等。

  • 问题:鉴于您有类似vector<Animation>. 此外,为所有可能的组合创建一个单独的类似乎代码臃肿。

3)使用模板特化,并特化那些依赖于这些属性的函数。喜欢template<bool looped, bool uniqueFrameTimes> class Animation

  • 问题:这个问题是你不能只拥有一个vector<Animation>for 某物的动画。也可能臃肿。

我想知道这些选项中的每一个提供什么样的速度?我对第 1 和第 2 选项特别感兴趣,因为第 3 选项不允许遍历Animations 的一般容器。

简而言之,什么更快 - vtable fetch 或条件?

0 投票
5 回答
5506 浏览

c++ - 为什么我们需要一个虚拟表?

我一直在寻找有关虚拟表的一些信息,但找不到任何易于理解的信息。

有人可以给我解释的好例子吗?