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

DLL中的绑定类函数

  •  2
  • lamas  · 技术社区  · 14 年前

    我对dll导入和函数绑定比较陌生。假设我有一个C++项目,它是一个完全在面向对象编程中编写的GUI库,旨在在游戏中使用。

    但是我的游戏项目是用德尔菲写的。我现在想将delphi函数绑定到dll中的函数。

    我知道如何用简单的函数来实现这一点,而不需要像C中那样的类——但是OOP呢?

    简而言之,我能将Delphi函数绑定到DLL中的那些,这些是由编译的C++类组成的吗?

    在编译过程中类不会丢失吗?

    3 回复  |  直到 14 年前
        1
  •  3
  •   torak    14 年前

    我仍在研究C++的许多方面,但希望下面有一些意义。

    有一些方面的C++,我认为不会很好地翻译,通过纯粹的基于DLL的导入机制。例如,我不认为您能够支持多态性或方法重载。

    然而,这并不意味着你不能利用类。我认为最简单的方式来传达这可能是一个玩具的例子。

    //Start with a class definition
    class foo
    {
      int bar = 0;
      int getBar();
    };
    
    // Now create a C API that you can access from Delphi
    extern "C" {
    
    void *createFoo()
    {
      return new foo();
    }
    
    int getBar(void *fooInstance)
    {
      foo *fooObj = (foo*)fooInstance;
      return fooObj->getBar();
    }
    
    } // end of extern "C"
    

    然后导出 extern "C" 函数Delphi并使用它们。

    我没有现成的编译器来测试这一点,可能会有错误,但是希望有足够的编译器来传达这个概念。如果有任何严重错误,请告诉我,我会解决的。

        2
  •  1
  •   Jerry Coffin    14 年前

    在编译中,类不一定是“丢失”的,但是Delphi(大概)也不知道如何处理C++类。这是可能的(我最近没有检查)Delphi可以使用/处理与Borland /NavaCorro编译器编译的C++类,但几乎可以肯定。 不会 知道如何处理使用(例如)GNU或Microsoft编译的任何内容。

    这就是为什么ActiveX控件(通常是COM)很流行的原因——它们允许您从遵循 二元的 接口,允许该类(或那些类)从任何其他了解ActiveX的类(以及其他几乎包含所有内容的类)中使用。

        3
  •  0
  •   Mason Wheeler    14 年前

    这是棘手的,因为C++使用了与Delphi非常不同的对象模型。鲁迪·韦尔修斯写道 a pretty good article on how to accomplish it, 使用两种不同的方法,这两种方法都有点难看。