JNative方式調用dll
JNative是一種能夠使Java語言使調用DLL的一種技術,對JNI進行了封裝,可能有些讀者會有這樣一個問題,JNative對JNI進行了封裝,並且是一種跨語言的使用DLL,會不會在效率方面很不如人意,我可以用我使用Jnative的經驗告訴你,不會!因為我用Jnative就是用來處理大量的數據調用,是基於實時數據庫接口的調用。而實時數據庫的數據量是非常大的。
首先下載JNative,
注意:將JNative解壓,並將其中的JNativeCpp.dll拷貝到system32文件夾中,libJNativeCpp.so是linux平台使用的。
代碼:
[java] view plain copy
- package com.tvjody;
- import org.xvolks.jnative.JNative;
- import org.xvolks.jnative.exceptions.NativeException;
- import org.xvolks.jnative.util.Kernel32.SystemTime;
- public class Demo {
- public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {
- // Kernel32.dll為dll名稱,Kernel32目錄的位置為:C:\Windows\System32下面,
- // GetSystemTime為Kernel32.dll中的一個方法.
- JNative nGetSystemTime = new JNative("Kernel32", "GetSystemTime");
- SystemTime systemTime = new SystemTime();
- // 設置參數
- nGetSystemTime.setParameter(0, systemTime.getPointer());
- nGetSystemTime.invoke();
- // 解析結構指針內容
- return systemTime.getValueFromPointer();
- }
- public static void main(String[] args) throws NativeException, IllegalAccessException {
- System.err.println(GetSystemTime());
- System.exit(0);
- }
- }
JNA方式調用dll
JNA(Java Native Access)框架是一個開源的Java框架,是SUN公司主導開發的,建立在經典的JNI的基礎之上的一個框架。
首先下載JNA,
代碼:
[java] view plain copy
- package com.tvjody;
- import com.sun.jna.Library;
- import com.sun.jna.Native;
- import com.sun.jna.Platform;
- public class JNA {
- // 定義接口CLibrary,繼承自com.sun.jna.Library
- public interface testdll extends Library {
- // msvcrt為dll名稱,msvcrt目錄的位置為:C:\Windows\System32下面,
- testdll Instance = (testdll) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
- testdll.class);
- // printf為msvcrt.dll中的一個方法.
- void printf(String format, Object... args);
- }
- public static void main(String[] args) {
- // 調用printf打印信息
- testdll.Instance.printf("yyyyMMdd");
- }
- }
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
以上源代碼下載