JNA - أساليب الاتصال على مثيل C ++ مرت مرة أخرى من DLL

StackOverflow https://stackoverflow.com/questions/1873194

  •  18-09-2019
  •  | 
  •  

سؤال

قل لدي DLL C ++ مع طريقة واحدة مصدرة مثل:

CustomerProcessor* getInstance();

أي أنه ببساطة إرجاع مثيل للفئة التي تحتوي فعلا على الطرق التي أحتاج إليها.

أعلم أنني أستطيع تعيين طريقة GetInstance () إلى فئة في Java باستخدام JNA (تمديد COM.SUN.JNA.LIBRARY)، قم بتخزين مثيل CustomerProcessor المرتجع في COM.Sun.jna.pointer.

هل يمكنني الآن رسم خريطة بطريقة أو بأخرى إلى فئة CustomerProcessor بحيث يمكنني الاتصال بطرق عليها (وإذا كان الأمر كذلك، فماذا)؟

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

المحلول

لأي تعسفية type* function() التعريف يمكنك تعيين الطريقة باستخدام jna كما العودة com.sun.jna.Pointer, ، لكنك لن تتمكن من استدعاء الأساليب على كائن C ++ من JNA.

سيكون هناك حل بسيط لهذا هو كتابة مكتبة واجهة C تستثمر ببساطة الطريقة على الكائنات لك ... لذلك إذا كان لديك بعض وظيفة الأعضاء foo() يمكنك تصدير طريقة ج من رمز C ++ الخاص بك:

extern "C" void bar(type* var){
   var->foo();
}

من الواضح أن هذا سيضيف بعض العمل من أجلك ... لكنني أظن أن النفقات العامة للتبديل إلى jni. سيكون عن نفسه.

نصائح أخرى

jnaerator قد يسهل القيام بما تسأل. لديها بعض الدعم للوصول Demangling و VTable (مطلوب للاتصال * هذه الأساليب).

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