C ++에서 ADA 기능을 호출 할 수 있습니까?
-
05-07-2019 - |
문제
나는 HS 동안 2-3 년 동안 Pascal을 사용했지만 완전한 Ada 초보자입니다.
IIRC, C/C ++에서 Pascal 컴파일 기능을 호출 할 수 있습니다. C ++에서 ADA에서 작성된 절차 및 기능을 호출 할 수 있습니까?
다른 팁
다음은 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;
}
참조 :
그런 종류의 일은 항상 이루어집니다. 트릭은 양측에 루틴에 "C"스타일 호출 프로토콜을 사용하도록 지시하는 것입니다. C ++에서 이것은 Extern "C"선언으로 수행되며 Pragma Export ( "C", ...
자세한 내용은 좋아하는 각 참조 소스에서 찾아보십시오. 포인터 및 참조 매개 변수를 조심하십시오!
절대적으로 가능합니다. 지난 5 년 동안 저는 C ++와 ADA를 혼합하는 시스템을 연구 해 왔습니다.
예. 몇 년 전에 나는 그것을 증명하기 위해 짧은 간단한 데모를 썼습니다. 두 개의 DLL이 있었는데, 하나는 C ++로 작성되었고 다른 하나는 ADA에 작성되었습니다. 그들은 방금 부동 소수점 값에 상수를 추가했습니다. 두 개의 앱, 하나는 C ++와 하나는 ADA에서 각각 DLL을 모두 사용했습니다. 따라서 ADA에서 C ++ 호출/호출의 가능한 모든 조합이 존재했습니다. 모두 잘 작동했습니다. 이것은 당시 현재 버전이 무엇이든 Windows에있었습니다. 나는 기억하지 못하지만 Linux 또는 Beos 에서이 작업을 수행했을 수도 있습니다.
이제 그로부터 소스 코드를 찾을 수 있다면 ...