เมื่อเร็ว ๆ นี้ฉันได้ทำโครงการสำหรับการรับรู้ใบหน้าบนหน้าเว็บและเขียนอัลกอริทึมการจดจำใบหน้าใน C ++ อย่างไรก็ตามฉันต้องใช้แบ็กเอนด์ Java บนหน้าเว็บซึ่งเกี่ยวข้องกับปัญหาของการโทร Java DLLS ต่อไปนี้เป็นตัวอย่างง่ายๆของสิ่งที่บรรณาธิการประสบความสำเร็จโดยการค้นหาข้อมูลที่เกี่ยวข้อง
1. ขั้นตอนแรกคือการสร้างคลาสใหม่ใน Java
ดังที่แสดงในภาพด้านบนให้ความสนใจกับระบบประโยค LoadLibrary ("JavacallCpp"); ซึ่งเป็นรหัสในการโหลดไฟล์ DLL จากนั้นเราจำเป็นต้องใช้การเพิ่มการลบการคูณและวิธีการแบ่งที่กำหนดไว้ด้านล่างใน DLL
2. รวบรวมไฟล์ชื่อไฟล์คือ java2cpp.java , คอมไพล์เป็นครั้งแรกในไฟล์คลาส หากคุณใช้ Eclipse ไฟล์จะถูกสร้างขึ้นโดยอัตโนมัติในโฟลเดอร์ bin ในไดเรกทอรีโครงการ รวบรวมด้วยบรรทัดคำสั่งเปิดหน้าต่าง CMD, CD ไปยังไดเรกทอรีที่ไฟล์. java อยู่และเรียกใช้งานคำสั่ง Javac Java2cpp.java นั่นคือสร้าง java2cpp.class.class
จากนั้นเรียกใช้คำสั่ง javah java2cpp เพื่อสร้างไฟล์ส่วนหัว java2cpp.h แต่ขั้นตอนนี้มักจะล้มเหลว อีกวิธีหนึ่งสามารถประสบความสำเร็จได้ ป้อนไดเรกทอรีของโครงการ Eclipse ป้อนโฟลเดอร์ bin ดำเนินการคำสั่ง javah -classpath -jni ชื่อแพ็คเกจชื่อคลาส (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 ntestjni = 0; testjni_api int fntestjni (เป็นโมฆะ) {return 42;} // นี่คือตัวสร้างของคลาสที่ส่งออก // สำหรับข้อมูลเกี่ยวกับคำจำกัดความของคลาสให้ดู testjni.hctestjni :: ctestjni () {return;} jniexport jint jnicall java_com_test_jni_java2cpp_dll_1add (jnienv *env 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!