`
zxggmail
  • 浏览: 29360 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

接口的虚函数表

阅读更多

BREW接口获取虚函数表,有两个相关的宏: GET_PVTBL和AEEGETPVTBL,其定义如下:

 

// returns an 'iname'Vtbl *

#define GET_PVTBL(p,iname)       ((iname*)(void*)p)->pvt


/* macro for retrieving the vtable from an instance of an interface */

#define AEEGETPVTBL(p,iname)  (*((AEEVTBL(iname) **)((void *)p)))


由上面的定义可以看出, GET_PVTBL要求接口结构中有个pvt项作为虚函数表指针, 而AEEGETPVTBL则是使用第一项作为虚函数表指针的指针. 所以二者虽然都有GET,PVTBL的字样, 但是它们不能相互替换. 

BREW的早期版本中, 使用QINTERFACE定义接口, 其中使用了pvt, GET_PVTBL应该是配合这个宏使用的. 在网上的一些资料中,使用的就是QINTERFACEGET_PVTBL.

现在, 较新版本BREW(比如3.1.5)使用AEEINTERFACE_DEFINE定义接口, 而AEEGETPVTBL配合这个宏使用.

昨天晚上把AEEGETPVTBL写成GET_PVTBL了,编译通不过,郁闷了一晚.
今天早上,我试着写成宏展开的形式,编译没问题, 再一查宏定义, 才知是把宏的名称写错了.

又一个低级错误...
分享到:
评论

相关推荐

    c++虚函数与虚函数表

    ### C++虚函数与虚函数表的理解 #### 一、虚函数的概念 在C++中,虚函数(Virtual Function)是一种特殊类型的成员函数,它允许基类指针或引用指向派生类对象,并通过该基类指针或引用调用派生类中重写的同名函数。...

    C++虚函数表测试源码

    总之,C++的虚函数表是多态性的基石,它使得我们能够在运行时动态地确定函数调用的目标,这对于实现面向对象设计中的抽象和接口至关重要。通过对标题和描述中的知识点进行深入学习和实践,开发者可以更好地理解和...

    C++虚函数及虚函数表解析

    C++的虚函数和虚函数表是面向对象编程中实现多态性的重要机制。多态性允许通过基类指针或引用调用不同子类的重写方法,从而实现更灵活的设计和代码复用。 虚函数(Virtual Function)是基类中声明的一种特殊函数,...

    C++虚函数表实现聚合(COM)

    在实践中,我们可能需要查看源代码来理解其具体细节,包括如何定义虚函数、如何实现接口以及如何通过虚函数表进行函数调用。这样的例子可以帮助我们深入理解C++和COM中的多态性是如何工作的,并且在设计和实现自己的...

    C++虚函数表解析

    在C++编程语言中,虚函数表(Virtual Function Table,简称vtable)是实现多态性的一个关键机制。多态性允许我们使用基类指针或引用来调用派生类中的重写方法,从而提高了代码的灵活性和可扩展性。下面我们将详细...

    解析C++虚函数表 PDF

    ### 解析C++虚函数表 #### 虚函数与多态性 在C++编程语言中,虚函数(Virtual Function)是实现多态性的关键机制之一。多态性允许我们使用父类类型的指针或者引用去调用子类中重写的函数。简单来说,就是“一个...

    C++_虚函数表解析

    ### C++ 虚函数表解析 #### 一、引言与背景 在面向对象编程中,多态性是一项核心特性,它允许我们通过基类的接口操作派生类的对象,从而实现灵活的设计和编码模式。C++ 语言中实现多态的主要方式之一就是通过虚...

    C++ 虚函数表解析

    在C++编程语言中,虚函数表(Virtual Function Table,简称vtable)是实现多态性的一个关键机制。本文将深入探讨C++虚函数表的工作原理、用途以及如何解析它。 虚函数表是一个由编译器自动生成的隐式数据结构,通常...

    C++虚函数实现原理

    - 当一个类继承自另一个含有虚函数的基类时,派生类会拥有自己的虚函数表,并且该表通常会包含基类虚函数表中的函数地址,以及派生类自身定义的虚函数地址。 2. **虚表指针的初始化:** - 每个对象都会有一个虚表...

    详细讲述c++虚函数实现

    虚函数的实现依赖于虚函数表(Virtual Table,简称V-Table)。每个含有虚函数的类都会有一个虚函数表,存储了该类及所有基类虚函数的指针。当创建一个类的实例时,这个虚函数表会被分配在对象实例的内存中。因此,当...

    c++多态技术和虚函数表

    ### C++多态技术与虚函数表解析 #### 引言 在计算机科学尤其是面向对象编程领域中,多态(Polymorphism)是一项核心概念和技术,它允许对象以多种形态出现,即通过单一接口实现多样化的功能。在C++中,多态可以通过...

    虚函数、多态、动态联编

    每个含有虚函数的类实例都会包含一个指向虚函数表的指针,这个指针在对象创建时初始化,指向对应的虚函数表。当通过基类指针调用虚函数时,实际上是通过这个指针找到虚函数表,然后根据表中的地址调用实际的函数。 ...

    虚函数的真相(VC编译器如何实现“virtual ”规则)

    对于虚继承,编译器需要处理多个虚基类的虚函数表,这可能导致多层的虚函数表结构。而对于纯虚函数,它们没有实现,仅作为接口声明,所以对应的表项通常是一个空指针。 VC编译器还会考虑内联函数和编译时多态。对于...

    详解了C++中的模板,位运算,虚函数表 方面的东西

    在C++编程语言中,模板、位运算和虚函数表是三个非常重要的概念,它们各自在不同的场景下发挥着关键作用。接下来,我们将详细探讨这三个主题。 首先,模板(Template)是C++的一个强大特性,它允许我们创建泛型代码...

    C++ 虚函数详细解析

    每个包含虚函数的类都会有一个对应的虚函数表,而每个类的对象都会有一个指向该虚函数表的指针。 ##### 虚函数表的作用 虚函数表的核心作用在于解决继承和覆盖的问题,确保即使通过基类指针调用虚函数,也能正确...

    C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题demo

    问题的根源可能在于虚函数表(vtable)的处理。每个类都有一个虚函数表,用于存储虚函数的地址。当子类继承了多个基类,且这些基类有同名的虚函数时,子类的vtable会包含所有这些函数,但调用顺序和选择可能会产生...

    c++多态和虚函数表

    当通过基类指针调用虚函数时,C++运行时系统会查找对应的虚函数表,并根据虚函数表中的信息调用正确的函数版本。 示例代码: ```cpp #include "dynamic_poly.h" int main() { Vehicle* vehicle1 = new Car(); ...

    深入C++虚表(虚函数 虚表 反汇编)

    ### 深入C++虚表(虚函数 虚表 反汇编) #### 一、引言 多态性是C++语言的核心特性之一,它允许子类重写父类的行为,使得不同类型的对象能够响应相同的接口,进而提高了程序的可扩展性和灵活性。在C++中,实现多态性...

    虚函数.ppt

    6. **虚函数表(vtable)**:C++编译器为每个含有虚函数的类创建一个虚函数表,表中存储了虚函数的地址。这个机制使得运行时能够找到正确的方法来调用。 虚函数的使用需谨慎,因为它们会增加程序的运行时开销。但是...

Global site tag (gtag.js) - Google Analytics