เนื่องจากความต้องการของโครงการฉันเพิ่งศึกษาวิธีการของ Java Calling 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 native public int dll_sub (int a, int b); // ลดการลดลงของประชาชน int dll_mul (int a, int b); // public native int dll_div (int a, int b); // หารโมฆะคงที่สาธารณะหลัก (สตริง args []) {int sum = 0; java2cpp test = ใหม่ java2cpp (); sum = test.dll_add (2, 4); System.out.println ("Java Call CPP DLL ผลลัพธ์:" + ผลรวม);}};2. สร้างไฟล์. h: cmd ไปยังไดเรกทอรี java2cpp.java และทำสิ่งต่อไปนี้:
ขั้นตอนที่ 1: javac java2cpp.java สร้าง java2cpp.class
ขั้นตอนที่ 2: Javah Java2cpp สร้างไฟล์ส่วนหัว java2cpp.h โดยมีเนื้อหาต่อไปนี้:
หมายเหตุ: เนื้อหาของไฟล์ส่วนหัว Java2cpp.h ไม่สามารถแก้ไขได้มิฉะนั้นจะเกิดข้อผิดพลาด
3. การสร้าง VC Dynamic Library: สร้างโครงการ Library 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 jnicall jinicall java_java2cpp_dll_1mul 0; var = dll_api_mul (a, b); return var;} jniexport jint jnicall java_java2cpp_dll_1div (jnienv *env, งาน obj, 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 Project:
5. ใช้ DLL: เรียกใช้โปรแกรม Java ผลลัพธ์มีดังนี้:
ณ จุดนี้ DLL การโทร Java เสร็จสมบูรณ์แล้ว
สรุป
ด้านบนเป็นวิธีการของ Java Dynamic Library - JNI นำมาใช้โดยเรียก C/C ++ ว่าตัวแก้ไขแนะนำให้คุณ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!