سؤال

أثناء تعلم C# و Delphi Prism للاستخدام مع Monotouch ، فإنني أبحث عن طريقة لإعادة استخدام الكود المكتوب في Pascal كائن عادي. ببساطة إعادة كتابة كل ما قمت به في دلفي على مدى 15 عامًا أمر غير مقبول ببساطة.

لذا فإن سؤالي ذو شقين:

  1. إذا كنت من أجل الوسيطة ، فستكون مكتبة مكتوبة في كائن عادي باسكال مع عدم وجود تبعيات خارجية وتجميعها مع مترجم Arm Freepascal for iPhone - هل يمكنني استخدام Dylib الناتج من Monotouch؟
  2. إذا كان ما سبق صحيحًا ، فكيف أعلن وأدعو هذه الوظائف الخارجية من C#/PRISM؟ كيف أتعامل مع أنواع السجلات التي تمر وما إلى ذلك في أحادي؟

لقد لاحظت أن تطبيقات iPhone الأخرى تشحن مع ملفات Dylib الخاصة بها (مكتبة لعبة SDL هي مثال نموذجي). لا أجد أي سبب لعدم العمل.

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

المحلول

لم أعمل مع Monotouch ، ولكن Mono/.NET لديها ميزة تسمى P/Invoke (منصة استدعاء).

في الأساس ، تعلن وظائفك/الإجراءات الخاصة بك كخارجية في الكود المُدار وأضف أ DLLImport ينسب.

على عكس اسمها DLLImport يستورد وظائف/إجراءات من .so ملفات على Linux و .dylib الملفات كذلك.

http://www.mono-project.com/interop_with_native_libraries

P/استدعاء في أحادي

نصائح أخرى

لا أعرف شيئًا عن Monotouch ، وأقل عن جهاز Mac المتعلق بأجهزة ARM ، ولكن:

إذا كان LIB الخاص بك يستخدم في الغالب اتفاقية استدعاء CDECL ، ويمكن أن تستدعي Monotouch وظائف CDECL (C) على بعض آلية التشغيل الأصلية (P/invoke أو JNI مثل الأشياء) ، وهذا سيكون مبدأ أساسي يمكن أن يعمل.

الشيء نفسه بالنسبة للهياكل ، أعلن مع {$ packrecords c}.

قد تحتاج أيضًا إلى استدعاء وظيفتين (IIRC FPC_Initiialize ، وواحدة أخرى للانتهاء) لتهيئة/وضع اللمسات الأخيرة على FPC RTL قبل استدعاء وظائف.

أي شيء أعلى من مستوى C العادي ، مثل كائنات دلفي وربما لا يمكن استخدامه ، ويجب لفه. يمكن مجال يمكن إعادة استخدام كائنات Pascal (على الأقل إذا فهم Monotouch الكائنات C الهدف) ، ولكن مثل معظم الأشياء الأخرى المحددة لـ Apple ، فهذا ليس فورتي.

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