7

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

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

4

5 回答 5

7

根据this old tutorial,应该是可以的。

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

于 2008-11-01T16:59:28.763 回答
6

这是使用 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;

主文件

    /*
    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;
    }

参考:

于 2017-01-24T02:40:09.153 回答
2

这种事情一直在做。诀窍是告诉双方对例程使用“C”风格的调用协议。在 C++ 中,这是通过 extern "C" 声明完成的,而在 Ada 端,则使用 pragma Export ("C", ...

在您最喜欢的相应参考资源中查找这些内容以获取详细信息。注意指针和引用参数!

于 2009-01-09T17:54:52.150 回答
0

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

于 2008-11-02T02:43:23.937 回答
0

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

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

于 2011-01-06T23:39:04.370 回答