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

你能从Ada调用C++函数吗?

  •  6
  • oz10  · 技术社区  · 16 年前

    你能从Ada调用C++函数吗?

    我想知道是否有一种方法可以直接做到这一点,而不用用C实现,也不用编写C++包装器;和Ada包装器,例如我想使用c++>Ada而不是c++>c->阿达。

    6 回复  |  直到 12 年前
        1
  •  5
  •   T.E.D.    16 年前

    如果你能将C++函数声明为extern“C”,那就很容易了。只需在C++端执行此操作,并在Ada端使用Ada的标准C导入功能。

    例子:

    在您的cpp中:

    extern "C" int cpp_func (int p1, int p2) {
       ; // Whatever..
    }
    

    function cpp_func (p1, p2 : Interfaces.C.Int) return Interfaces.C.Int;
    pragma Import (C, cpp_func); 
    
    ...
    Result : constant Interfaces.C.Int := cpp_func (1, 2);
    
        2
  •  4
  •   Loki Astari    16 年前

    Ada到C++的问题是C++没有定义的ABI。

        4
  •  1
  •   Benoît photo_tom    16 年前

    这似乎是不可能的。..

    here

    “从Ada到C++的直接接口超出了Ada的范围(至少95)”

        5
  •  1
  •   Bill Rawlinson    16 年前

    自从99/00以来,我就没有接触过Ada,所以我的记忆可能有点粗略,但当我们在Ada中开发图形化窗口应用程序时,我们需要用C++做一些事情(非关键任务),我们将两者结合的方式是将C++内容放在一个dll中,然后为该dll创建一个C包装器,然后使用指定C包装器的pragma接口,然后我们可以从该接口调用dll中的方法。

    我认为这相当于一些三重维护,因为如果在C++dll中更改了方法签名,则必须在pragma接口和C包装器中更新它们。

    基本上,这是一种痛苦。我认为我们必须在C包装器中使用Win32 Lean and Mean预编译器指令。

        6
  •  0
  •   oz10    16 年前

    Green Hills Software也发布了一个很好的PDF文件。
    http://www.ghs.com/download/whitepapers/ada_c++.pdf