هل يمكنك استدعاء وظائف Ada من C++؟
-
05-07-2019 - |
سؤال
أنا مبتدئ في 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 ++ داعيا / دعا من آدا موجودة. كل شيء يعمل بشكل جيد. وكان هذا على ويندوز مهما كان النسخة الحالية في ذلك الوقت؛ لا أذكر ولكن قد حصلت على هذا العمل على لينكس أو بيوس.
والآن فقط إذا كان يمكن أن تجد لي شفرة المصدر من ذلك ...