Question

Je suis un débutant dans Ada, même si j'ai utilisé Pascal pendant 2 à 3 ans au cours du SH.

IIRC, il est possible d’appeler des fonctions compilées Pascal à partir de C / C ++. Est-il possible d'appeler des procédures & amp; fonctions écrites en Ada à partir de C ++?

Était-ce utile?

La solution

Selon ce ancien tutoriel , cela devrait être possible.

Cependant, comme illustré par ce fil , vous devez faire attention avec c ++ extern " C " définitions de vos fonctions Ada.

Autres conseils

Voici un exemple utilisant g ++ / gnatmake 5.3.0:

REMARQUE: soyez prudent lorsque vous transmettez des données entre C ++ et 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;
    }

Références:

Ce genre de chose se fait tout le temps. L'astuce consiste à dire aux deux parties d'utiliser un protocole d'appel de style "C" pour la routine. En C ++, cela se fait avec extern "C". déclarations, et du côté Ada avec pragma Export ("C", ...

Recherchez ces informations dans vos sources de référence respectives préférées. Méfiez-vous des paramètres de pointeur et de référence!

Absolument c'est possible. Au cours des cinq dernières années, j'ai travaillé sur un système combinant C ++ et Ada.

Oui. Il y a plusieurs années, j'ai écrit une courte démonstration simple pour le prouver. Il y avait deux DLL, l'une écrite en C ++ et l'autre en Ada. Ils ont juste ajouté des constantes aux valeurs en virgule flottante. Deux applications, une en C ++ et une en Ada, utilisaient chacune la DLL. Donc, chaque combinaison possible d'appels C ++ / appelés depuis Ada existait. Tout a bien fonctionné. C'était sur Windows quelle que soit la version actuelle du moment; Je ne me souviens pas, mais cela a peut-être fonctionné sous Linux ou BeOS.

Maintenant, si seulement je pouvais trouver le code source à partir de ça ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top