سؤال

لقد ورثت مشروع J++ القديم.لقد قمت بترقية هذا المشروع إلى معيار Sun Java بنجاح.

ومع ذلك، يتضمن هذا المشروع ملف C++ dll أصليًا والذي يتحدث إليه كود Java عبر ملف dll الخاص بشركة Microsoft إطار عمل RNI.

وغني عن القول، أن استدعاء System.loadLibrary("myRniNativeDll") يؤدي الآن إلى ظهور خطأ UnsatisifiedLinkError، مما يعني تعذر العثور على إحدى التبعيات.

أنا جاهل تمامًا بكيفية ترحيل ملف C++ RNI dll إلى ملف JNI dll؛ليس لدي أي فكرة من أين أبدأ.لدي شفرة مصدر C++، لكني لا أعرف كيفية إنشاء ملف JNI dll. هل هناك أي نصائح/برامج تعليمية/مواد عبر الإنترنت يمكن لخبراء جافا توجيهي إليها؟

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

المحلول

إذا كان الترخيص مقبولاً (LGPL)، جافا الوصول الأصلي يوفر مؤسسة مالية أجنبية أكثر ودية إلى حد ما مما توفره JNI؛قد يؤدي النقل إلى تجريد طبقة RNI وكشف واجهة برمجة تطبيقات بسيطة قابلة للاستدعاء "C".

نصائح أخرى

نلقي نظرة على جينا - قد يكون من الممكن الوصول إلى RNI DLL مباشرة بهذه الطريقة؛أو على الأقل سيجعل مهمة النقل أسهل بكثير من القيام بـ JNI يدويًا.

إذا كان ذلك ممكنًا، أقترح عليك أن تفكر في تجنب مشكلة نقل RNI -> JNI عن طريق إعادة كتابة كود C++ في Java خالصة.

تتطلب كتابة كود JNI قدرًا كبيرًا من العناية، وتعرض استقرار JVM للخطر إذا أخطأت في استخدامه.نصيحتي هي تجنب ذلك إذا كنت تستطيع ذلك.

على الرغم من أنني لم أستخدم RNI من Microsoft مطلقًا، فقط JNI من Sun، أتوقع أنه لا يمكنك استخدام DLL على نمط RNI مباشرة كما لو كان DLL على نمط JNI.كما أنني لست على علم بأي شيء من شأنه تحويل RNI أو جسره تلقائيًا إلى JNI.

لم تذكر ما إذا كان لديك مصدر C++ RNI DLL، على الرغم من أنني سأفترض أنك تفعل ذلك منذ أن ذكرت وراثة المشروع.إذا كان لديك أي خبرة في C++/C، ولديك فكرة جيدة عن الوظائف التي يوفرها RNI DLL، فلن يكون من الصعب جدًا نقلها إلى JNI.من المحتمل أن يؤتي الوقت المستثمر في النقل ثماره للحفاظ على المضي قدمًا.

الرابط الذي قدمته لإدخال JNI على ويكيبيديا يحتوي على الكثير من الروابط المفيدة حول البرمجة باستخدام JNI.وبدون مزيد من التفاصيل، فمن الصعب تقديم أي نصيحة أخرى.

واجهة جافا الأصلية:دليل المبرمج والمواصفات هو أفضل مورد وجدته لكتابة كود JNI.إنه لا يغطي RNI -> JNI، ولكنه نقطة بداية رائعة* لتعلم كيفية عمل JNI.

*إنها في الواقع جافة جدًا، وليست ممتعة للقراءة بشكل خاص، ولكنها أفضل ما تمكنت من العثور عليه.

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