نظرًا لاحتياجات المشروع ، فقد درست مؤخرًا طريقة جافا استدعاء DLL. كيفية تسميتها مكتوبة هنا لسهولة الإشارة في المستقبل:
الطريقة التي تم تبنيها هي JNI: Java Native Interface ، المشار إليها باسم JNI ، هي جزء من منصة Java ويمكن استخدامها للتفاعل مع الكود المكتوب في Java بلغات أخرى.
فيما يلي مخطط تخطيطي لعمل JNI المستخرج من الإنترنت:
الوصف العام: أولاً قم بإنشاء فصل في Java ، وإنشاء .class من خلال Javac ، ثم قم بإنشاء .H من Javah ؛ ثم انسخ .h إلى VC ، وتنفيذ وظائف محددة بواسطة VC.
بعد التجميع والمرور ، قم بإنشاء DLL ، ووضع DLL في مشروع Java واستخدامه ، وتم الانتهاء منه.
دعنا نتحدث عن الخطوات المحددة (بما في ذلك الأمثلة):
1. بناء فئة Java: تحميل DLL ، أعلن أنه يجب استخدام طريقة DLL ، والتنفيذ المحدد مسؤول عن DLL ؛ الرمز كما يلي:
الفئة العامة java2cpp {static {system.loadlibrary ("javacallcpp") ؛} public native int dll_add (int a ، int b) ؛ // أضف العمومي الأصلي int dll_sub (int a ، int b) ؛ // تقليل العام الأصلي int dll_mul (int a ، int b) ؛ // متعددة عامة أصلية int dll_div (int a ، int b) ؛ // قسّم Public Static Void Main (String args []) {int sum = 0 ؛ java2cpp test = new java2cpp () ؛ sum = test.dll_add (2 ، 4) ؛ system.out.println ("java call cpp dll result:" + sum) ؛}}}2. إنشاء .H ملف: CMD إلى دليل Java2cpp.java وافعل ما يلي:
الخطوة 1: javac java2cpp.java يولد java2cpp.class
الخطوة 2: تقوم Javah Java2CPP بإنشاء ملف java2cpp.h ، مع المحتوى التالي:
ملاحظة: لا يمكن تعديل محتوى ملف الرأس java2cpp.h ، وإلا فإن حدوث خطأ.
3. صنع مكتبة VC Dynamic: قم بإنشاء مشروع مكتبة ديناميكي C/C ++ ، يسمى JavacallCPP ، استيراد Java2cpp.h وتنفيذ طريقته:
#include "java2cpp.h" #include "dllapi.h" jniexport jint jnicall java_java2cpp_dll_1add (jnienv *env ، Job Obj ، jint a ، jint b) {int var = 0 ؛ var = dll_api_add (a ، b) ؛ java_java2cpp_dll_1sub (jnienv *env ، Job OBJ ، jint a ، jint b) {int var = 0 ؛ var = dll_api_sub (a ، b) ؛ return var ؛} jniexport jint java_java2cpp_dll_ 0 ؛ var = dll_api_mul (a ، b) ؛ return var ؛} jniexport jint jnicall java_java2cpp_dll_1div (jnienv *env ، jobj ، jint a ، jint b) {int var = 0 ؛ var = dll_api_div (a ، b)أضف dll_api_add () ، وطرح DLL_API_SUB () ، وضرب dll_api_mul () ، وقسم dll_api_div ().
تم تنفيذه في الملف ، اسم الملف هو dllapi.cpp ، والتنفيذ كما يلي:
int dll_api_add (int a ، int b) {return (a+b) ؛} int dll_api_sub (int a ، int b) {return (ab) ؛} int dll_api_mul (int a ، int b) {return (a*b) ؛في هذا الوقت ، لا يزال المشروع يجمع ، نظرًا لوجود خطأ في تضمين <Jni.h> ، تحتاج إلى إضافة الدليل الذي يقع فيه JNI ، على النحو التالي:
4. تجميع مشروع المكتبة الديناميكية: إنشاء javacallcpp.dll ونسخ هذه المكتبة الديناميكية إلى دليل مشروع Java:
5. استخدم DLL: قم بتشغيل برنامج Java ، والنتيجة هي كما يلي:
في هذه المرحلة ، تم الانتهاء من مكالمة Java Call DLL.
لخص
ما سبق هو طريقة مكتبة Java Dynamic - JNI التي تم تنفيذها عن طريق الاتصال بـ C/C ++ الذي يقدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!