jnative調用delphi的DLL文件

1.下載JNative的包

JNative-1.3.2下有三個文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar。

JNativeCpp.dll拷到windows/system32目錄下

libJNativeCpp.so爲Linux中使用的文件

JNative.jar擴展包拷到%JAVA_HOME%/jre/lib/ext下或者導入到工程中


2.Jnative中使用到的一些類和方法

org .xvolks .jnative .Jnative :  裝載dll文件,定位函數  如:Jnative native=new Jnative("dllName");
JNative (),setParameter(),setRetVal(),getRetVal() etc.

org .xvolks .jnative .pointers .Pointer: 替代本地函數中的的指針,需要先申請一塊內存空間,才能創建,一般使用MemoryBlockFactory 利用工廠模式進行創建.
Pointer(),dispose()

org .xvolks .jnative .pointers .memory .MemoryBlockFactory : 申請一塊內存空間
createMemoryBlock()

org .xvolks .jnative .exceptions.NativeException : 拋出裝載,定位等方面的異常

org .xvolks .jnative .Type : 列舉和管理Jnative 需要的不同的數據類,一般需要傳值的時候指定所傳值的類型和函數的返回值


3.使用方法

3.1. 加載dll文件

JNative可使用兩種方式加載dll文件:
使用System.loadLibrary 加載
使用此方法可加載系統目錄中的dll文件。可以先把dll文件複製到system32 目錄下,使用文件前綴名作爲參數來加載dll文件。
使用System.load 加載
此方法參數爲dll文件全路徑名。

3.2. 調用函數

1、首先創建JNative對象:
JNative jnative = new JNative(dll文件名, 函數名);
2、設置返回值類型:
jnative.setRetVal(Type.INT);
3、設置參數
jnative.setParameter(0, Type.STRING, …); //設置第一個參數爲字符串
jnative.setParameter(1, Type.INT, String.valueof(…));       //設置第二個參數爲整數
4、執行
n.invoke();
5、獲取返回值
Integer.parseInt(jnative.getRetVal());


4.一個簡單的例子:

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;

public class JNativeTest {
    public static final int messageBox(int parentHandle, String message,
             String caption, int buttons) throws NativeException,
             IllegalAccessException {
          JNative n = null;
          try {
             n = new JNative("User32.dll", "MessageBoxA"); // 常量DLL_NAME的值爲User32.dll
             // 構造JNative時完成裝載User32.dll,並且定位MessageBoxA方法
             n.setRetVal(Type.INT); // 指定返回參數的類型
             int i = 0;
             n.setParameter(i++, Type.INT, "" + parentHandle);
             n.setParameter(i++, Type.STRING, message);
             n.setParameter(i++, Type.STRING, caption);
             n.setParameter(i++, Type.INT, "" + buttons); // 指定位置上的參數類型和值
             n.invoke(); // 調用方法
             return Integer.parseInt(n.getRetVal());
          } finally {
             if (n != null)
                n.dispose(); // 記得釋放
          }
       }
    public static void main(String[] args) throws NativeException, IllegalAccessException{
        JNativeTest.messageBox(100,"Hello jnative", "jnativetest", 1);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章