可以从 C++ 调用 Ada 函数吗?
我是一个完全的 Ada 新手,尽管我在高中期间已经使用 Pascal 2-3 年了。
IIRC,可以从 C/C++ 调用 Pascal 编译函数。 是否可以调用过程& 从 C++ 用 Ada 编写的函数?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我是一个完全的 Ada 新手,尽管我在高中期间已经使用 Pascal 2-3 年了。
IIRC,可以从 C/C++ 调用 Pascal 编译函数。 是否可以调用过程& 从 C++ 用 Ada 编写的函数?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
根据这个旧教程,应该是可能的。
但是,如 此线程,您必须小心 Ada 函数的 c++ extern "C" 定义。
According to this old tutorial, it should be possible.
However, as illustrated by this thread, you must be careful with the c++ extern "C" definitions of your Ada functions.
以下是使用 g++/gnatmake 5.3.0 的示例:
注意:在 C++ 和 Ada 之间传递数据时要小心
ada_pkg.ads
ada_pkg.adb
< strong>main.cpp
参考文献:
Here's an example using g++/gnatmake 5.3.0:
NOTE: Be careful when passing data between C++ and Ada
ada_pkg.ads
ada_pkg.adb
main.cpp
References:
这种事情一直在做。 诀窍是告诉双方在例程中使用“C”风格的调用协议。 在 C++ 中,这是通过 extern "C" 声明完成的,在 Ada 方面是通过 pragma Export ("C", ...
在您最喜欢的相应参考源中查找这些内容以获取详细信息。请注意指针和参考参数!
That kind of thing is done all the time. The trick is to tell both sides to use a "C"-style calling protocol for the routine. In C++ this is done with extern "C" declarations, and in the Ada side with pragma Export ("C", ...
Look those up in your favorite respective reference sources for details. Watch out for pointer and reference paramters!
是的。 几年前,我写了一个简短的简单演示来证明这一点。 有两个 DLL,一个用 C++ 编写,另一个用 Ada 编写。 他们只是将常量添加到浮点值中。 两个应用程序(一个使用 C++,一个使用 Ada)都使用了这两个 DLL。 因此,C++ 调用/Ada 调用的每种可能的组合都存在。 一切都很好。 这是在 Windows 上运行的,无论当时的版本如何; 我不记得了,但可能已经在 Linux 或 BeOS 上运行了。
现在如果我能从中找到源代码就好了......
Yes. Several years ago I wrote a short simple demo to prove it. There were two DLLs, one written in C++ and the other in Ada. They just added constants to floating point values. Two apps, one in C++ and one in Ada, each used both the DLL. So every possible combination of C++ calling/called from Ada existed. It all worked fine. This was on Windows whatever version was current at the time; I don't recall but may have gotten this working on Linux or BeOS.
Now if only I could find the source code from that...