Pregunta

Soy un completo novato de Ada, aunque he usado Pascal durante 2 o 3 años durante el HS.

IIRC, es posible llamar a las funciones compiladas de Pascal desde C / C ++. ¿Es posible llamar a procedimientos & amp; ¿Funciones escritas en Ada desde C ++?

¿Fue útil?

Solución

De acuerdo con este tutorial antiguo , debería ser posible.

Sin embargo, como se ilustra en este hilo , debe tener cuidado con el c ++ extern " C " Definiciones de tus funciones de Ada.

Otros consejos

Aquí hay un ejemplo usando g ++ / gnatmake 5.3.0:

NOTA: tenga cuidado al pasar datos entre C ++ y 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;
    }

Referencias:

Ese tipo de cosas se hacen todo el tiempo. El truco es decirle a ambas partes que utilicen un protocolo de llamada de estilo "C" para la rutina. En C ++ esto se hace con extern " C " Declaraciones, y en el lado de Ada con Pragma Export (" C " ;, ...

Busque esos en sus respectivas fuentes de referencia favoritas para obtener detalles. ¡Cuidado con los punteros y los parámetros de referencia!

Absolutamente es posible. Durante los últimos cinco años he estado trabajando en un sistema que mezcla C ++ y Ada.

Sí. Hace varios años escribí una breve demostración simple para probarlo. Había dos DLL, una escrita en C ++ y la otra en Ada. Acaban de agregar constantes a los valores de punto flotante. Dos aplicaciones, una en C ++ y una en Ada, utilizaron ambas la DLL. Así que existía toda combinación posible de llamadas a C ++ / llamadas desde Ada. Todo funcionó bien. Esto estaba en Windows cualquiera que sea la versión actual en ese momento; No lo recuerdo, pero es posible que haya funcionado en Linux o BeOS.

Ahora si tan solo pudiera encontrar el código fuente de eso ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top