سؤال

أنا مبتدئ في Ada، على الرغم من أنني استخدمت Pascal لمدة 2-3 سنوات خلال HS.

IIRC، من الممكن استدعاء وظائف Pascal المترجمة من C/C++.هل من الممكن استدعاء الإجراءات والوظائف المكتوبة في Ada من C++؟

هل كانت مفيدة؟

المحلول

ووفقا لهذا العمر تعليمي ، فإنه ينبغي أن يكون ممكنا.

ولكن، وكما يتضح من <لأ href = "http://archives.devshed.com/forums/programming-132/problem-passing-in-out-parameter-from-c-to-ada-1023388.html "يختلط =" نوفولو noreferrer "> هذا الموضوع ، يجب أن تكون حذرا مع ج خارجي ++" تعريفات 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 ++ يتم ذلك مع تصريحات خارجي "C"، وفي الجانب آدا مع PRAGMA التصدير ( "C"، ...

وانظروا هؤلاء حتى في مصادر رجوع اليها المفضلة منها للحصول على التفاصيل. احترس من المؤشر والمرجعية معلمتين!

وبالتأكيد فمن الممكن. على مدى السنوات الخمس الماضية لقد تم العمل على نظام يمزج C ++ وأدا.

نعم. قبل عدة سنوات كتبت التجريبي قصيرة وبسيطة لاثبات ذلك. كان هناك اثنين من دلس، واحدة مكتوبة في C ++ وغيرها في ادا. أنها مجرد وأضاف الثوابت إلى القيم النقطة العائمة. اثنين من تطبيقات، واحدة في C ++ واحد في ادا، كل تستخدم كل من DLL. لذلك كل ما يمكن الجمع بين C ++ داعيا / دعا من آدا موجودة. كل شيء يعمل بشكل جيد. وكان هذا على ويندوز مهما كان النسخة الحالية في ذلك الوقت؛ لا أذكر ولكن قد حصلت على هذا العمل على لينكس أو بيوس.

والآن فقط إذا كان يمكن أن تجد لي شفرة المصدر من ذلك ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top