Java調用DLL有多種方式,常用的方式有JNative、JNA、JNI等。


JNative方式調用dll

JNative是一種能夠使Java語言使調用DLL的一種技術,對JNI進行了封裝,可能有些讀者會有這樣一個問題,JNative對JNI進行了封裝,並且是一種跨語言的使用DLL,會不會在效率方面很不如人意,我可以用我使用Jnative的經驗告訴你,不會!因為我用Jnative就是用來處理大量的數據調用,是基於實時數據庫接口的調用。而實時數據庫的數據量是非常大的。

首先下載JNative

注意:將JNative解壓,並將其中的JNativeCpp.dll拷貝到system32文件夾中,libJNativeCpp.so是linux平台使用的。

代碼:

[java] view plain copy

  1. package com.tvjody; 
  2. import org.xvolks.jnative.JNative; 
  3. import org.xvolks.jnative.exceptions.NativeException; 
  4. import org.xvolks.jnative.util.Kernel32.SystemTime; 
  5. public class Demo { 
  6. public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException { 
  7. // Kernel32.dll為dll名稱,Kernel32目錄的位置為:C:\Windows\System32下面,
  8. // GetSystemTime為Kernel32.dll中的一個方法.
  9.         JNative nGetSystemTime = new JNative("Kernel32", "GetSystemTime"); 
  10.         SystemTime systemTime = new SystemTime(); 
  11. // 設置參數
  12.         nGetSystemTime.setParameter(0, systemTime.getPointer()); 
  13.         nGetSystemTime.invoke(); 
  14. // 解析結構指針內容
  15. return systemTime.getValueFromPointer(); 
  16.     } 
  17. public static void main(String[] args) throws NativeException, IllegalAccessException { 
  18.         System.err.println(GetSystemTime()); 
  19.         System.exit(0); 
  20.     } 
JNA方式調用dll

JNA(Java Native Access)框架是一個開源的Java框架,是SUN公司主導開發的,建立在經典的JNI的基礎之上的一個框架。

首先下載JNA

代碼:

[java] view plain copy

  1. package com.tvjody; 
  2. import com.sun.jna.Library; 
  3. import com.sun.jna.Native; 
  4. import com.sun.jna.Platform; 
  5. public class JNA { 
  6. // 定義接口CLibrary,繼承自com.sun.jna.Library
  7. public interface testdll extends Library { 
  8. // msvcrt為dll名稱,msvcrt目錄的位置為:C:\Windows\System32下面,
  9.         testdll Instance = (testdll) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), 
  10.                 testdll.class); 
  11. // printf為msvcrt.dll中的一個方法.
  12. void printf(String format, Object... args); 
  13.     } 
  14. public static void main(String[] args) { 
  15. // 調用printf打印信息
  16.         testdll.Instance.printf("yyyyMMdd"); 
  17.     } 
JNI調用dll

如果有一個現有的.dll/.so文件,如果使用JNI技術調用,我們首先需要另外使用C語言寫一個.dll/.so共享庫,使用SUN規定的數據結構替代C語言的數據結構,調用已有的dll/so中公布的函數。
然后再在Java中載入這個適配器dll/so,再編寫Java   native函數作為dll中函數的代理。經過2個繁瑣的步驟才能在Java中調用本地代碼。
因此,很少有Java程序員願意編寫調用dll/.so庫中的原生函數的java程序。這也使Java語言在客戶端上乏善可陳。可以說JNI是Java的一大弱點!只提供幾個鏈接吧!

http://blog.sina.com.cn/s/blog_6c3b9ed40100xyl8.html
http://www.open-open.com/home/space-37924-do-blog-id-5681.html

以上源代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM