Frage

Ich bin ein kompletter Ada Neuling, obwohl ich Pascal für 2-3 Jahre bei HS verwendet habe.

IIRC ist es möglich, Pascal kompilierten Funktionen von C / C ++ zu nennen. Ist es möglich, in Ada von C schriftlichen Verfahren und Funktionen aufrufen ++?

War es hilfreich?

Lösung

Nach dieser alten Tutorial , sollte es möglich sein.

Wie jedoch durch dieses Thema , müssen Sie mit den C ++ extern vorsichtig sein."

Andere Tipps

Hier ist ein Beispiel mit g ++ / gnatmake 5.3.0:

Hinweis: Seien Sie vorsichtig, wenn Daten zwischen C ++ vorbei und 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;
    }

Referenzen:

Diese Art der Sache ist die ganze Zeit getan. Der Trick ist, um beiden Seiten zu sagen, ein „C“ -Stil calling-Protokoll für die Routine zu verwenden. In C ++ ist dies mit extern "C" Erklärungen gemacht, und in der Ada Seite mit Pragma Export ( "C", ...

diejenigen Suchen Sie nach Details in Ihrem Lieblings jeweiligen Referenzquellen auf. Achten Sie auf Zeiger und Referenz paramters!

Es ist absolut möglich. In den letzten fünf Jahren gearbeitet habe mich an einem System, das C ++ und Ada mischt.

Ja. Vor einigen Jahren schrieb ich eine kurze, einfache Demo zu beweisen. Es gab zwei DLLs, ein in C ++ geschrieben und die andere in Ada. Sie fügten hinzu, nur Konstanten Gleitkommazahlen. Zwei Anwendungen, ein in C ++ und eine in Ada, die jeweils verwendet, um sowohl die DLL. So jede mögliche Kombination von C ++ Aufruf / genannt von Ada existierte. Das alles hat gut funktioniert. Dies war auf Windows, was auch immer Version Strom zu der Zeit war; Ich erinnere mich nicht, aber haben diese Arbeit unter Linux oder BeOS bekommen.

Jetzt nur, wenn ich den Quellcode von dem finden könnte ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top