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

我是一个完整的Ada新手,虽然我在HS期间使用Pascal 2 – 3年。

IIRC,可以从C / C ++调用Pascal编译函数。 是否可以从C ++调用Ada编写的过程和函数?

根据这个旧教程 ,它应该是可能的。

但是, 如此线程所示 ,您必须小心Ada函数的c ++ extern“C”定义。

这是使用g ++ / gnatmake 5.3.0的示例:

注意:在C ++和Ada之间传递数据时要小心

ada_pkg.ads

package Ada_Pkg is procedure DoSomething (Number : in Integer); pragma Export (C, DoSomething, "doSomething"); end Ada_Pkg; 

ada_pkg.adb

  with Ada.Text_Io; package body Ada_Pkg is procedure DoSomething (Number : in Integer) is begin Ada.Text_Io.Put_Line ("Ada: RECEIVED " & Integer'Image(Number)); end DoSomething; begin null; end Ada_Pkg; 

main.cpp中

  /* TO BUILD: gnatmake -c ada_pkg g++ -c main.cpp gnatbind -n ada_pkg gnatlink ada_pkg -o main --LINK=g++ -lstdc++ main.o */ #include  extern "C" { void doSomething (int data); void adainit (); void adafinal (); } int main () { adainit(); // Required for Ada doSomething(44); adafinal(); // Required for Ada std::cout << "in C++" << std::endl; return 0; } 

参考文献:

这样的事情一直在做。 诀窍是告诉双方为例行程序使用“C”式调用协议。 在C ++中,这是使用extern“C”声明完成的,而在Ada中使用pragma Export(“C”,…

有关详细信息,请查看您最喜欢的参考资料。 注意指针和参考参数!

绝对是可能的。 在过去的五年里,我一直在研究一个混合了C ++和Ada的系统。

是。 几年前,我写了一个简短的演示来certificate它。 有两个DLL,一个用C ++编写,另一个用Ada编写。 他们只是将常量添加到浮点值。 两个应用程序,一个在C ++中,一个在Ada中,每个都使用了DLL。 因此,存在来自Ada的C ++调用/调用的每种可能组合。 一切都很好。 这是在Windows上当时的当前版本; 我不记得了,但可能已经在Linux或BeOS上运行了。

现在,如果我能从中找到源代码……