لقد قمت مؤخرًا بمشروع للتعرف على الوجه على صفحة الويب وكتبت خوارزمية التعرف على الوجه في C ++. ومع ذلك ، لا بد لي من استخدام الواجهة الخلفية Java على صفحة الويب ، والتي تتضمن مسألة Java Calling DLLS. فيما يلي مثال بسيط على ما حققه المحرر من خلال البحث عن المعلومات ذات الصلة.
1. الخطوة الأولى هي إنشاء فئة جديدة في جافا
كما هو موضح في الصورة أعلاه ، انتبه إلى نظام الجملة. ثم نحتاج إلى تنفيذ طريقة الإضافة والطرح والضرب والقسمة المحددة أدناه في DLL.
2. تجميع الملف ، اسم الملف هو java2cpp.java ، قم بتجميعه أولاً في ملف الفئة. إذا كنت تستخدم Eclipse ، فقد تم إنشاء الملف تلقائيًا ، في مجلد BIN في دليل المشروع. ترجمة مع سطر الأوامر ، افتح نافذة CMD ، قرص مضغوط على الدليل حيث يوجد ملف .java ، وتنفيذ الأمر Javac Java2cpp.java ، أي إنشاء java2cpp.class
ثم قم بتنفيذ الأمر Javah Java2CPP لإنشاء ملف java2cpp.h ، ولكن هذه الخطوة غالباً ما تفشل. طريقة أخرى يمكن أن تنجح. أدخل دليل مشروع Eclipse ، أدخل مجلد Bin ، وقم بتنفيذ الأمر Javah -ClassPath. -jni package name.class name (com.test.jni.java2cpp) ، ثم قم بإنشاء com_test_jni_java2cpp.h
3. قم بإنشاء مشروع جديد Win32 في VS ، اسمه: Testjni ، الخطوة الثانية هي كما يلي:
4. انسخ ملف الرأس الذي تم إنشاؤه في الخطوة الثانية في مجلد المشروع ثم استيراده.
5. تنفيذ الطريقة في ملف الرأس:
(1) إنشاء ملف رأس جديد dllapi.h ، الرمز كما يلي:
#include "com_test_jni_java2cpp.h" int dll_api_add (int a ، int b) ؛ int dll_api_sub (int a ، int b) ؛ int dll_api_mul (int a ، int b) ؛ int dll_api_div (int a ، int b) ؛
(2) إنشاء dllapi.cpp جديد لتنفيذ الطريقة أعلاه ، الرمز هو كما يلي:
#include "stdafx.h" #include <ioStream> #include "dllapi.h" int dll_api_add (int a ، int b) {return (a + b) ؛} int dll_api_sub (int a ، int b) {return (a - b) ؛ dll_api_div (int a ، int b) {return (a / b) ؛} (3) أضف رمزًا إلى testjni.cpp لتنفيذ طريقة com_test_jni_java2cpp.h. بعد إضافة الرمز كما يلي:
// testjni.cpp: يحدد وظيفة التصدير لتطبيق DLL. //#تضمين "stdafx.h" #include "testjni.h" #include "com_test_jni_java2cpp.h" #include "dllapi.h" // هذا مثال على إجراءات التصدير. testjni_api int fntestjni (void) {return 42 ؛} // هذا هو مُنشئ الفئة المصدرة. // للحصول على معلومات حول تعريفات الفئة ، انظر testjni.hctestjni :: ctestjni () {return ؛} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1add (jnienv *env ، job ، jint a ، jint b) {int var = 0 ؛ var = dll_api_add (a ، b) ؛ return var ؛} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1sub (jnienv *env ، job obj ، jint a ، jint b) {int var = 0 ؛ var = dll_api_sub (a ، b) ؛ return var ؛} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1mul (jnienv *env ، Job OBJ ، jint a ، jint b) {int var = 0 ؛ var = dll_api_mul (a ، b) ؛ return var ؛} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1div (jnienv *env ، Job OBJ ، jint a ، jint b) {int var = 0 ؛ var = dll_api_div (a ، b) ؛ إرجاع var ؛}(4) إنشاء DLL ، ويمكنك العثور على testjni.dll في مجلد التصحيح تحت مجلد المشروع. ومع ذلك ، نظرًا لأننا نطلب من DLL تسمية JavacallCPP في Java ، فإننا نعيد تسمية المشروع إلى JavacallCPP في هذا الوقت ، ثم إعادة تجديد JavacallCPP. [سوف تفشل هذه الخطوة في توليدها ، إضافة المسار على النحو التالي]
6 طرق الاتصال
انسخ javacallcpp.dll التي تم إنشاؤها في الخطوة 5 إلى مجلد BIN تحت مسار تثبيت JRE وقم بتشغيل برنامج Java. النتائج كما يلي:
ما سبق هو الوصف الكامل لكيفية استدعاء Java إلى مكتبة C ++ DLL التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!