代码之家  ›  专栏  ›  技术社区  ›  Patrick

C++在DLL中更改类,在该DLL中,指向该类的指针返回到其他DLL。

  •  1
  • Patrick  · 技术社区  · 16 年前

    我知道这个标题很糟糕,问题也很糟糕。我正在使用一种软件,其中dll将ptr返回给内部类。其他DLL(调用DLL)则使用此指针直接调用该类的方法:

    //dll 1
    internalclass m_class;
    internalclass* getInternalObject() {
        return &m_class;
    }
    
    //dll 2
    internalclass* classptr = getInternalObject();
    classptr->method();
    

    我的想法是,这与已经编译的调用dll有关,该dll具有另一个dll中internalclass中每个函数的物理地址,但我并不真正理解它;这里是否有人能够提供dll(新的内部类dll、重新生成的调用dll和使用以前版本的内部类dll构建的调用dll)如何结合在一起的简明解释?

    谢谢 帕特里克

    4 回复  |  直到 16 年前
        1
  •  2
  •   MSalters    16 年前

    不,可能不需要重建。

    在幕后,internalclass::method()将被破坏为 internalclass__method(internalclass* __this) . 然后从DLL中按名称导出此已损坏的函数。

        2
  •  2
  •   xtofl Adam Rosenfield    16 年前

    当您的类有一个虚拟函数表,并且其中的函数更改顺序时,兼容性将被破坏。当用序号而不是符号链接时,它也会断开。

        3
  •  2
  •   Thomas    16 年前

    您应该已将ptr作为基类类型返回给派生类对象。然后您可以自由地更改派生类。但无法更改基类。

        4
  •  0
  •   luc    16 年前

    不要接触现有类并在新函数getInternalObject_ex()中返回指向派生类的指针