我是一個完整的Ada新手,雖然我在HS中使用了2-3年的Pascal。你可以從C++調用Ada函數嗎?
IIRC,可以從C/C++調用Pascal編譯的函數。是否可以調用程序&用C++編寫的Ada函數?
我是一個完整的Ada新手,雖然我在HS中使用了2-3年的Pascal。你可以從C++調用Ada函數嗎?
IIRC,可以從C/C++調用Pascal編譯的函數。是否可以調用程序&用C++編寫的Ada函數?
根據這old tutorial,它應該是可能的。
但是,如this thread所示,您必須注意Ada函數的C++ extern「C」定義。
絕對有可能。在過去的五年裏,我一直在研究混合C++和Ada的系統。
同意你回答他的問題 - 但它沒有提供很多見解。 – 2008-11-02 03:31:29
這種事情總是在做。訣竅是告訴雙方在例程中使用「C」風格的調用協議。在C++中,這是通過extern「C」聲明完成的,而在帶有雜注導出的Ada方面(「C」,...
請查看您最喜歡的相應參考資料來獲取詳細信息。參數如下:
是的,幾年前我寫了一個簡單的演示來證明它,有兩個DLL,一個用C++編寫,另一個用Ada,他們只是將常量添加到浮點值。 C++和Ada中的一個都使用了DLL,因此每一個可能的從C++調用/從Ada調用的組合都存在,它們都運行正常,這是在Windows上的任何版本;我不記得,但可能有在Linux或者BeOS上得到了這個工作
現在,如果我能來自找到源代碼...
下面是使用一個例子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;
}
參考文獻:
早在我的Ada幾天我寫了庫中的廣告並且能夠在C程序中引用它們,所以它肯定是可能的。 – cfeduke 2008-11-01 19:42:59