我是一个完整的Ada新手,虽然我在HS期间使用Pascal 2 - 3年。
IIRC,可以从C / C ++调用Pascal编译函数。是否可以调用程序&用C ++编写的Ada函数?
答案 0 :(得分:6)
根据这个old tutorial,它应该是可能的。
但是,如this thread所示,您必须小心使用Ada函数的c ++ extern“C”定义。
答案 1 :(得分:4)
以下是使用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 <iostream>
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;
}
参考文献:
答案 2 :(得分:1)
这种事情一直在做。诀窍是告诉双方为例程使用“C”式调用协议。在C ++中,这是使用extern“C”声明完成的,而在Ada中使用pragma Export(“C”,...
请查看您最喜爱的参考资料中的详细信息。注意指针和参考参数!
答案 3 :(得分:0)
绝对有可能。在过去的五年里,我一直在研究一个混合了C ++和Ada的系统。
答案 4 :(得分:0)
是。几年前,我写了一个简短的演示来证明它。有两个DLL,一个用C ++编写,另一个用Ada编写。他们只是将常量添加到浮点值。两个应用程序,一个在C ++中,一个在Ada中,每个都使用了DLL。因此,存在来自Ada的C ++调用/调用的每种可能组合。一切都很好。这是在Windows上当时的当前版本;我不记得了,但可能已经在Linux或BeOS上运行了。
现在,只要我能找到源代码......