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

pax*_*977 5 c c++ cross-language ada

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

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

Von*_*onC 6

根据这个老教程,它应该是可能的.

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


小智 5

下面是一个使用 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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

主程序

    /*
    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;
    }
Run Code Online (Sandbox Code Playgroud)

参考: