quang cao 1 quang cao 2
tin tức

Thao tác với DLL bằng Java

22/02/2012 - Xem: 4366
Môi trường triển khai
  • JDK 1.6_0.16
  • Eclipse
  • JUnit
  • VC++ Express 2010
Mục đích
File Calc.dll được tạo ra và bao gồm hai phương thức với đặc tả như sau
  • int add (int a, int b)
  • int substract (int a, int b)
Viết đoạn mã Java sử dụng sẵn hai phương thức đã được viết bằng VC++ và được dịch ra file dll.
Quy định chung
Một số tên gọi được giữ nguyên tiếng Anh thay vì viết tiếng Việt.
Thuật ngữ
Java = nền tảng Java & ngôn ngữ lập trình Java
C/C++ = ngôn ngữ lập trình C/C++
service(s) (trong tài liệu này) = các hàm viết bằng ngôn ngữ lập trình khác java
Intermediate platform = lớp trung gian giao tiếp giữa ứng dụng viết bằng Java & ứng dụng viết bằng các ngôn ngữ lập trình khác.
JNI (Java Native Interface) = lớp giao tiếp giúp JVM gọi các services được viết bằng ngôn ngữ lập trình khác.
JNA (Java Native Access) = truy cập vào các thư viện native mà không phải viết code JNI
Tổng quát
Bản thân ngôn ngữ Java không tự gọi được các hàm viết bằng các ngôn ngữ lập trình khác. Vì thế, trong Java Platform có cung cấp Java Native Interface (JNI) cho phép tích hợp chương trình viết bằng Java với những services được tạo ra trên nền tảng khác. JNI định nghĩa các chuẩn đặt tên và cách thức gọi hàm tích hợp trong JVM.
Kiến trúc

JNI architecture


Các bước gọi hàm trong file dll dịch từ C++
  • viết code java, bao gồm tên hàm & các tham số.
  • biên dịch file java = javac
  • tạo file header (*.h) = javah -jni
  • viết code C++ để thực thi, include file header tạo ra từ code java trên.
  • build mã nguồn C++ ra file dll
  • load file dll vào mã nguồn java và chạy.

Calling JNI

Trên là trường hợp lý tưởng khi có đủ cả mã nguồn & công cụ thực thi của các file dll. Tuy nhiên, trường hợp không thể có mã nguồn của dll mà chỉ có đặc tả kỹ thuật của các phương thức cần dùng thì công việc lại vất vả hơn chút. Đó là phải tự viết code C++ để đọc các
phương thức từ dll, tức là tự viết lớp intermediate platform ở trên để làm việc kết nối Java & dll (lập trình bằng C/C++)
Giải pháp khác
Có nhiều thư viện giải quyết việc giao tiếp giữa mã nguồn Java & dll (C/C++), JNA là một trong số đó với đặc điểm dễ dùng & miễn phí. Những thông tin cần thiết bao gồm
  • download jna.jar
  • import vào dự án (giả sử dùng eclipse)
  • load dll lên và sử dụng, cần có đặc tả kỹ thuật của các phương thức (tên, tham số, kiểu dữ liệu nên chính xác)
Làm bằng JNI đơn thuần
1. Viết file Calc.java
public native int add(int a, int b);
public static void main(String[] args) {
Calculator cal = new Calculator();
int sum = cal.add(1,2);
}
2. Biên dịch file Calc.java
javac Calc.java
3. Tạo ra file header (*.h) để sử dụng trong mã nguồn C++
javah -jni Calc
File Calc.h thu được có nội dung như dưới
#include
/* Header for class Calculator */
#ifndef _Included_Calculator
#define _Included_Calculator
#ifdef __cplusplus
extern “C” {
#endif
/*
* Class: Calculator
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_Calculator_add
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
} #
endif
#endif
Trong đó
  • JNIEXPORT jint JNICALL là quy tắc viết giao tiếp của JNI
  • jint là kiểu native của int
4. Viết mã nguồn C++
  • #include file Calc.h header như trên
  • viết mã nguồn chính
#include
#include “Calc.h”
JNIEXPORT jint JNICALL
Java_Calc_add(JNIEnv *env, jobject obj, jint a, jint b)
{
return a + b;
}
5. Dịch mã nguồn C++ thành file dll. Trường hợp đã có sẵn file *.dll, từ bước (1) – (4) thì viết các phương thức theo như đặc tả kỹ thuật của file *.dll nhận được. Tại bước (4), viết các hàm C++ để gọi đến hàm C++ trong file *.dll đó.
6. Sử dụng file dll vừa dịch trong mã nguồn Java.
Cách này đòi hỏi người làm vừa phải làm với Java, vừa phải làm với C/C++. Nếu các lập trình viên Java ngại làm việc với C/C++ thì thư viện Java Native Access (JNA) là một trong số những lựa chọn tốt để sử dụng. Lợi ích của nó là có thể tránh cho lập trình viên can thiệp hoặc viết mới mã nguồn C/C++, tức là bỏ qua bước (3), (4) ở trên.
Sử dụng JNA
1. Vào website https://jna.dev.java.net/ và download thư viện cần thiết
  • jna.jar
  • platform.jar (không bắt buộc)
2. Import thư viện jna.jar và viết mã nguồn java
○ file Calc.java
package Calculator;
import com.sun.jna.*;
public interface Calc extends Library {
int add(int a, int b);
}
○ file Cal.java
package Calculator;
import com.sun.jna.*;
public class Cal {
static Calc init() {
Calc c = (Calc) Native.loadLibrary(“Path/to/Calc”,
Calc.class);
return c;
} public static void main (
String [] args) {
System.out.println(add(1, 2));
} public static int add(int a, int b) {
return init().add(a, b);
} public static int substract(int a, int b) {
return init().substract(a, b);
}
}
Có thể gộp 2 files trên thành 1, tuy nhiên, việc viết interface mô tả các phương thức gọi các hàm native làm cho code dễ quản lý hơn.
Vậy là chạy roài.
Hai lỗi thường gặp
  • java.lang.UnsatisfiedLinkError: Error looking up function ‘’: The specified procedure could not be found. -> kiểm tra lại chính xác tên hàm, kiểu dữ liệu (native) & tham số.
  • java.lang.UnsatisfiedLinkError: Unable to load library ‘C:\Users\nguyen.duc.hoang\Documents\Visual Studio 2010\Projects\Calc\Debug\’: The specified module could not be found -> kiểm tra lại tên file dll, đường dẫn đến file, phiên bản build & nền tảng lập trình của file đó.
Hạn chế của JNA
Tốc độ chậm hơn JNI native khoảng 10 lần (nghe nói thế), tuy nhiên vẫn có những cách để tăng thêm hiệu suất làm việc (chưa thử). Việc mapping giữa library & functions giữa JNA và native code cũng gặp vấn đề về
  • tính chính xác
  • các kiểu dữ liệu.
Những yêu cầu của file *.dll dùng được
  • có mô tả chính xác tên hàm, giá trị trả về & tham số truyền vào.
  • có mô tả chi tiết các kiểu dữ liệu, hằng số
  • ngoài ra, file *.dll nên được viết (nếu = C/C++) đúng chuẩn xuất ra dll chứ không phải dll gắn trực tiếp & cố định vào một ứng dụng cụ thể (vì lý do ràng buộc giữ các thư viện - nếu có).
  • có thể xem được tên hàm của file *.dll bằng các chương trình phân tích dll đơn giản.
Tham khảo thêm
  • website chính của dự án JNA https://jna.dev.java.net/
  • Sheng Liang The Java™ Native Interface (Programmer’s Guide and Specification)

(i-php.net)

Liên kết

Tin được quan tâm nhất

Quản cáo

Tags: xo so , kqxs , xo so mien bac , ket qua xo so , ket qua xo so mien bac , so xo , xskt , ket qua so xo , xổ số miền bắc , xs , soi cau xoso , ket qua xsmb , soi cau mb , ket qua , so ket qua , kết quả xổ số , du doan xo so , xo so truc tiep , xosomienbac , soi cau mien bac , du doan xsmb , kqxs mb , xo so hom nay , du doan xo so mien bac , xổ số , soi cau lo , soxo , ket qua xo so hom nay , kết quả xổ số , kết quả , xổ số miền bắc , tần số nhịp , soi cầu lotto , lotto gan , đầu đuôi lotto , đo dàn đặc biệt , chu kỳ đặc biệt , vietlott , sx vietlott , mega , mega 6/45 , power 6/55 , jackpot mega 6/45 , jackpot power 6/55 , xổ số điện toán , xo so dien toan , xổ số mega , vietlott power , xổ số power , jackpot power , power , xổ số miền trung , kết quả xổ số miền trung , kqxs miền trung , xs miền trung , xs mt , kqxs mt , xổ số miền nam , kết quả xổ số miền nam , kqxs miền nam , xs miền nam , xs mn , kqxs mn , lịch vạn niên , xem lịch hôm nay , xem ngày , xem giờ tốt , xem ngày tốt , giờ tốt hôm nay , lịch hôm nay , giờ hoàng đạo , xem giờ hoàng đạo , thiết kế website , thiết kế web giá rẻ , thiết kế web , thiết kế logo , thiết kế ấn tượng , mẫu thiết kế , thiết kế , design website , design web , design logo , design template , design , đồ họa , lập trình , máy tính , hack , hacker , bảo mật , mạng máy tính , công nghệ , thủ thuật , facebook , like , tăng like , fanpage , phần mềm , tin học , thông tin , php , website , web , logo , template , mẫu đẹp , soi cầu mb , du doan xsmb , dự đoán xsmb , du doan xo so mien bac , du doan xs mb , du doán xsmb , xoso minh ngoc , xổ số hà nội , xổ số ha noi , xsmb 30 ngày , xsmb 30 ngay , xsmb30ngay , xo so mien bac 30 ngay , xsmb30 ngày , kết quả xổ số miền bắc hôm nay , kết quả xổ số miên bắc hôm nay , xổ số miền bắc hôm nay , xổ số miên bắc hôm nay , xô sô miên băc hôm nay , xô số miền bắc hôm nay , xổ số miền bắc , kết quả xổ số , ket qua xsmb , ket qua xo so mien bac , ket qua xs mb , xo số miền bắc , kết qua xsmb , xô sô miên băc , xổ số miên bắc , xổ số miền băc , xo so , xổ số , xô số , xôso , xổ sô , xstd , kết quả xổ số miền bắc , kết quả xổ số miên bắc , kếtquảxổ sốmiềnbắc , xsmn , xổ số miền nam , sxmn , kqxs , xổ số miền nam hôm nay , xổ số hôm nay , xo so mien nam , kqxsmn , xs mn , xô số miền nam , xs kt , xo số miền nam , kq xs , xô số hôm nay , xo số mien nam , xỗ số miền nam , xo số miền nam hôm nay , xổ so hôm nay , sxmb , xổ số miền trung , xổ số miền trung hôm nay , xs mt , xô sô miên trung hôm nay , xsmb , kqxsmb , xs mb , xổ số miền bac , kq xsmb , xổ số mien bac , xổ so miền bắc , xs minh ngọc , xsmb thu 6 , xsmb thứ 6 , xs mega , xs bd , xs vl , xo so mien bac thu 6 , xosome , sổ kết quả , quay thử xổ số miền nam , dudoan xsmn , du đoán xsmn , xổ số vietlott , soi cầu , xổ số cần thơ , dự đoán kết quả xổ số siêu chính xác hôm nay , du đoán kết quả xổ số siêu chính xác hôm nay , soi cau du doan xsmb chinh xac 100 , xo so me , xs vietlott , xổ số khánh hòa , xổ số gia lai , xổ số đắk lắk , xổ số bạc liêu , xổ số bình định , xổ số đà nẵng , trực tiếp xổ số miền nam , xsmn thứ 4 , xổ số đồng nai , xổ số thủ đô , dự đoán xổ số miền nam , xổ số miền nam thứ ba , xổ số miền nam trực tiếp , trực tiếp xổ số miền bắc , truc tiếp xổ số miền bắc , xổ số miền bắc trực tiếp , trực tiếp kết quả xổ số miền bắc , trục tiếp kết quả xổ số miền bắc , xổ số miền nam minh ngọc , soi cầu miền bắc , dự đoán xổ số miền bắc , xổ số đại phát , soi cau xo so mien bac , soi cau xs mb , xs bl , xs st , quay thử xổ số miền bắc , thống kê kết quả xổ số miền bắc 100 ngày , xổ số tiền giang , thống kê xổ số miền bắc , truc tiep xsmb , truc tiep xo so mien bac , trưc tiêp xsmb , truc tiếp xsmb , tructiep xsmb , xổ số trực tiếp miền bắc , xổ số bến tre , dd xsmb , xổ số long an , xổ số miền bắc 100 ngày , xsmn thứ 2 , xsmn thu2 , xổ số miền bắc hàng tuần , xổ số miền bắc hàng ngày , xổ số vũng tàu , xổ số miền bắc 30 ngày , xổ số miền nam chủ nhật , xổ số miền nam thứ 6 , xổ số trực tiếp , xổ số miền nam thứ 7 , kết quả xổ số mb , xổ số miền nam thứ 2 , xổ số trực tiếp miền nam , xổ số miền nam thứ tư hàng tuần , xổ số minh ngọc miền nam , xổ số đồng tháp , xổ số trực tiếp hôm nay , xổ số thành phố , xổ số miền bắc thứ sáu hàng tuần , xổ số miền , xổ số miền bắc hôm quả , xổ số tây ninh , xổ số hà nội hôm nay , xsmb truc tiep , xsmb trực tiếp , xổ số miền nam thứ hai , xổ số miền bắc thứ ba , xổ số ba miền , xổ số miền bắc ngày hôm nay , xổ số miền bắc thứ ba hàng tuần , xổ số vĩnh long , xổ số vinh long , xs mien bac , xs mien bắc , xổ số đài bắc , xổ số miền bắc hôm qua , xổ số miền bắc hom qua , xổ số phú yên , ket qua xo so , so xo mien bac , kết quả xsmb , ket qua so xo , ket qua so xo mien bac , xsmn kết quả xổ số miền nam , xo so mien bac hom nay , sổ xô miên bắc hôm nay , kết quả xổ số kiến thiết miền bắc , xs mb hom nay , so xo mien bắc , số xo mien bac , kết qua xo so , ket qua xo số , xổ số kiến thiết miền bắc , kqxs miền bắc , xsmb hôm nay , miền bắc , xổ số kiến thiết miền bắc hôm nay , xsmb xsmn kết quả xổ số miền bắc hôm nay , xổ số hôm nay miền bắc , xsktmb , xskt miền bắc , xs dt , xs mb hôm nay , kqxs mien bắc , xsmbhom nay , xsmb xsmn kết quả xổ số miền bac hôm nay , so xo , xs bt , xổ số mb , kqxs miền nam , kqxs mien nam , ket qua xs mien nam , xo số mb , xo sô mb , xosomienbac , kqxs mien bac , xoso mien bac , xổ số kiên giang , kết quả xổ số miền nam , so xo mien nam , xo so hom nay , số miền nam , xs hom nay , xổ số bình dương , xsmn hom nay , xsmn sxmn kết quả xố số miền nam hôm nay , xổ số sóc trăng , xổ số trà vinh , kết quả xổ số miền nam hôm nay , xổ số chiều nay , xổ số cà mau , xstt , xs mien nam , xổ số kiến thiết miền nam , kết quả xổ số hôm nay , xổ số hồ chí minh , xổ số kiến thiết , ket qua xo so mien nam , xổ số miền nam hôm qua , xổ số miền nam ngày hôm nay , sxmn hôm nay , xo so mn , xs3m , xshom nay , kqsxmn , xổ số ba đài , xskt hôm nay , xosomiennam , xổ số kiến thiết hôm nay , xổ số bình phước , xsbth , xs dn , xs vt , xs tg , xs tn , xskt miền nam , xs ag , xs mn hom nay , xoso mien nam , xổ số hcm , xs bth , số xo mien nam , xsmn sxmn kết quả xổ số miền nam hôm nay , xs kt hôm nay , kết quả xo so mien nam , kết quả xố số hôm nay , kết quả xổ số miền trung , xo so mien trung , so xo mien trung , xs mien trung , kết quả xổ số miền trung hôm nay , xs daklak , xs mtrung , xo so miền trung , xskt mien trung , kq xs mt , xs đăk lăk , sốmientrung , số miền bắc , kết quả xổ số miền bắc ngày hôm nay , kết quả xổ số xsmb , kqxs 30 ngày , kqxsmb hôm nay , kết quả xổ số miền bắc hôm qua , kqxs 30 ngay , sốmienbac , kq xsmb hôm nay , kqxsmb 30 ngày , du doan xsmn , xổ số an giang , xổ số quảng ngãi , xsmb 30 , xsmn thứ 5 , xsmn thứ 6 , quay thu xsmb , soi cau mn , xổ số kon tum , xsmn thứ 7 , xsmn thứ 3 , xsmb 90 ngày , quay thu xsmn , du doan mb , xsmb thu 4 , xsmb thứ 7 , xsmb thu 5 , xổ số minh ngọc hôm nay , xổ số miền bắc thứ hai hàng tuần , xsmb thu 2 , xổ số miền bắc thứ bảy hàng tuần , xổ số miền bắc chủ nhật hàng tuần , xsmn chủ nhật , xổ số hậu giang , xổ số miền bắc thứ tư hàng tuần , xsmb thứ 5 , xổ số đà lạt , xsmb thứ 3 , xsmn thu 6 , xsmb thu 3 , xổ số miền bắc thứ năm hàng tuần , xsmb minh ngoc , xsmb thu 7 , xs khanh hoa , xsmn thu 7 , xs gia lai , xsmn cn , xsmb thứ 4 , xsmb cn , ketquanet , kết quả xổ số miền bắc 30 ngày , xổ số bình thuận , xs da nang , xsmb thứ 2 , xổ số miền nam thứ 3 , xổ số miền bắc chủ nhật , xs kon tum , xsgl , xổ số miền nam thứ sáu hàng tuần , xổ số miền nam thứ tư , xổ số miền nam thứ ba hàng tuần , xổ số miền bắc minh ngọc , xổ số miền nam chủ nhật hàng tuần , xổ số miền nam thứ năm hàng tuần , quay thu mn , xổ số miền bắc thứ bảy , xổ số miền nam thứ bảy hàng tuần , xổ số miền nam thứ hai hàng tuần , xổ số miền bắc thứ hai , xổ số quảng bình , xổ số miền bắc thứ tư , xổ số miền bắc thứ sáu , xổ số miền nam thứ bảy , kết quả xổ số 30 ngày , xổ số 3 miền , xổ số chủ nhật hàng tuần , xổ số miền nam thứ năm , xổ số miền bắc thứ năm , dự đoán xổ số miền trung , ket qua xsmb 30 ngay , xổ số ninh thuận , quay thử xsmb , xổ số miền nam thứ sáu , xổ số thứ tư hàng tuần , thong ke xsmb , kết quả xsmb 30 ngày , xổ số thứ hai hàng tuần , xổ số thứ năm hàng tuần , xổ số thứ bảy hàng tuần , xổ số thứ ba hàng tuần , xsmb 200 ngày , thống kê xsmb , xổ số thứ sáu hàng tuần , xs binh dinh , xsbdi , kqxs minh ngoc , xsmb chu nhat , xstd 30 , soi cầu 666 , xổ số 30 ngày , xsmb chủ nhật , thống kê kết quả xổ số miền bắc , xsmb 90 ngay , xs quang ngai , xsmb 30 ngày gần nhất , dự đoán xsmb minh ngọc , dự đoán xsmb win2888 , truc tiep xsmn , xsmt thứ 2 , xsmb t7 , xsmn t4 , xsmb 200 ngay , soi cau wap , xsmb30 , xsmb minh ngọc , xs khánh hòa , xsmb 100 ngay , xo so phu yen , xsmn thu5 , xsmb 100 ngày , xo so binh dinh , xsmnthu4 , du doan xs , kqxs minh ngọc , xo so quang ngai , xsmnthu3 , xs py , xsmn thu4 , xsmn 30 ngay , soi cau xsmb win2888 , xs gl , xsmn thu6 , xsmnthu5 , xsmb thu3 , xs khánh hoà , xs qng , xstd30 , dự đoán mb , xsmbthu3 , xs hg , trực tiếp xsmn , xs dl , xs mb t7 , xs mn thu 7 , xs mn thu 5 , du doan xsmb win2888 , ket qua xo so mien bac 30 ngay , quay thu xs mb , xs mn thu 3 , xs mn thu 2 , xs mn thu 6 , xs mb thu 4 , xs mb cn , xs mn thu 4 , du doan xsmb minh ngoc , xs binh đinh , xo so mien bac thu 5 , xs mb thu 2 , xs mb chu nhat , dự đoán mn , quay thu xs mn , quay thu xo so mien bac , xs mt thu 2 , xs mn cn , xs khanh hòa , xs mn minh ngoc , thong ke xs mb , xs khanh hoà , dự đoán xsmb minh ngoc , dudoan mn , du đoán mb , xs truc tiep , xs trực tiếp , xs truc tiếp , max 3d , max3d , xsglai , xsmn t7 , số kết quả , xs g lai , xs mn t7 , ket qua vietlott , ket quả vietlott , kết quả vietlott , sosomienbac , kq vietlott , xổ số vietlott hôm nay , vietlott hôm nay , xs tv , xsmchung , dự đoán giải đặc biệt ngày mai , xo so online , dò vé số , dự đoán xổ số , xổ số hà nội trực tiếp , dự đoán kết quả xổ số miền bắc , xổ số me , xổ số mẹ , xô sô me , xổ số miền bắc trực tiếp hôm nay , trực tiếp xổ số miền bắc hôm nay , xổ số ba miền hôm nay , quay thử xổ số miền bắc hôm nay , trực tiếp xổ số miền nam hôm nay , kết quả xổ số vietlott , xổ số cần thơ hôm nay , soi cầu dự đoán xổ số miền bắc hôm nay , kết quả xổ số vietlott hôm nay , dự đoán kết quả xổ số , dự đoán kết quả xổ số miền bắc hôm nay , du đoán kết quả xổ số miền bắc hôm nay , soi cầu xổ số , dự đoán xổ số miền bắc hôm nay , xổ số miền nam trực tiếp hôm nay , trực tiếp kết quả xổ số miền nam , kết quả xổ số trực tiếp miền nam , dư đoán xổ số miền bắc hôm nay , du đoán xổ số miền bắc hôm nay , xổ số trực tiếp miền nam hôm nay , trực tiếp kết quả xổ số miền bắc hôm nay , trực tiếp xổ số hôm nay , soi cầu miền bắc hôm nay , dự đoán xổ số miền trung chính xác 100 , trực tiếp miền bắc , xổ số miền bắc hôm nay trực tiếp , truc tiep kết quả xổ số miền bắc hôm nay , tra cứu kết quả xổ số miền bắc , xs dien toan , xsdientoan , dự đoán xổ số miền nam hôm nay