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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值