【问题标题】:C++: Binding class functions in DLLsC++:在 DLL 中绑定类函数
【发布时间】:2010-09-01 15:52:13
【问题描述】:

我对 DLL 导入和函数绑定比较陌生。假设我有一个 C++ 项目,它是一个完全用 OOP 编写的 GUI 库,旨在用于游戏。

然而,我的游戏项目是用 Delphi 编写的。我现在想将 Delphi 函数绑定到 DLL 中的函数。

我会知道如何使用简单的函数来做到这一点,而无需像 C 中那样的类 - 但是 OOP 呢?

简而言之:我可以将 Delphi 函数绑定到由已编译 C++ 类组成的 DLL 中的函数吗?

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

【问题讨论】:

    标签: c++ delphi dll binding


    【解决方案1】:

    我仍在学习 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】:

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

      这就是为什么 ActiveX 控件(以及一般的 COM)很受欢迎的原因——它们允许您从遵循 binary 接口规范的 DLL 导出一个类,允许该类(或那些类)从任何其他了解 ActiveX 的东西(现在几乎包括所有东西)中使用。

      【讨论】:

        【解决方案3】:

        这很棘手,因为 C++ 使用与 Delphi 完全不同的对象模型。 Rudy Velthius 用两种不同的方法写了a pretty good article on how to accomplish it,,这两种方法都有点丑。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-05
          • 2015-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-23
          • 1970-01-01
          相关资源
          最近更新 更多