2008-11-01 85 views

回答

5

根據這old tutorial,它應該是可能的。

但是,如this thread所示,您必須注意Ada函數的C++ extern「C」定義。

+0

早在我的Ada幾天我寫了庫中的廣告並且能夠在C程序中引用它們,所以它肯定是可能的。 – cfeduke 2008-11-01 19:42:59

0

絕對有可能。在過去的五年裏,我一直在研究混合C++和Ada的系統。

+0

同意你回答他的問題 - 但它沒有提供很多見解。 – 2008-11-02 03:31:29

1

這種事情總是在做。訣竅是告訴雙方在例程中使用「C」風格的調用協議。在C++中,這是通過extern「C」聲明完成的,而在帶有雜注導出的Ada方面(「C」,...

請查看您最喜歡的相應參考資料來獲取詳細信息。參數如下:

0

是的,幾年前我寫了一個簡單的演示來證明它,有兩個DLL,一個用C++編寫,另一個用Ada,他們只是將常量添加到浮點值。 C++和Ada中的一個都使用了DLL,因此每一個可能的從C++調用/從Ada調用的組合都存在,它們都運行正常,這是在Windows上的任何版本;我不記得,但可能有在Linux或者BeOS上得到了這個工作

現在,如果我能來自找到源代碼...

3

下面是使用一個例子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; 
    } 

參考文獻:

相關問題