我是一个完整的Ada的新手,尽管我用Pascal为2-3年期间HS。

请参考,它可能叫帕斯卡编制职能从C/C++。是否有可能呼吁过程和功能写在Ada从C++?

有帮助吗?

解决方案

根据旧教程,应该可以。

然而,如这个帖子,你必须小心使用c ++ extern”C“。您的Ada功能的定义。

其他提示

这里有一个例子使用克++/gnatmake5.3.0:

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

ada_pkg.广告

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

参考文献:

这种事情一直在做。诀窍是告诉双方对例程使用“C”式调用协议。在C ++中,这是用extern“C”完成的。声明,并在Ada方面使用pragma Export(“C”,...

请查看您最喜爱的参考资料中的详细信息。注意指针和参考参数!

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

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

现在,只要我能找到源代码......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top