문제

나는 HS 동안 2-3 년 동안 Pascal을 사용했지만 완전한 Ada 초보자입니다.

IIRC, C/C ++에서 Pascal 컴파일 기능을 호출 할 수 있습니다. C ++에서 ADA에서 작성된 절차 및 기능을 호출 할 수 있습니까?

도움이 되었습니까?

해결책

이것에 따르면 오래된 튜토리얼, 가능해야합니다.

그러나 다음과 같이 설명합니다 이 스레드, ADA 기능의 C ++ Extern "C"정의에주의해야합니다.

다른 팁

다음은 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 에서이 작업을 수행했을 수도 있습니다.

이제 그로부터 소스 코드를 찾을 수 있다면 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top