参考文章:http://hi.baidu.com/zuchang319/blog/item/39e7373cf432d2ca9e3d629f.html
首先对方写给我一个dll的方法。但是最开始的时候对方发送来的是一个string的字符串,对于Delphi而言。String应该是一个指针(这个是我自己猜想的)。
然后我是用一下方法进行调用。
package com.duduli.li;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public interface JnaUseDelphiDll extends StdCallLibrary{
//加载动态链接库,把库dll文件默认放到系统C盘window目录下的system32文件夹下或者到java的bin目录
JnaUseDelphiDll instance = (JnaUseDelphiDll)Native.loadLibrary("WWServiceCom_3", JnaUseDelphiDll.class);
//对应动态链接库中的方法, 要注意的是 这里的方法必须要和链接库(dll文件)对应的方法名一致
// public int ClearRecord(String addr, int sm);
public String Test2();
}
package com.duduli.li;
public class TestJNA {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JnaUseDelphiDll jnaDemo = JnaUseDelphiDll.instance;
String s = jnaDemo.Test2();
System.out.println("输出结果为:"+s);
}
}
如果有参数的话,需要参考链接信息。
一下代码是从链接从复制过来。
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class DLL {
public static void main(String[] args) throws NativeException, IllegalAccessException{
String sb = new String("192.168.17.200");
ClearRecord(sb, 0);
}
public static int ClearRecord(long thandle, String addr, int sm) throws NativeException, IllegalAccessException{
JNative n = null;
n = new JNative("SYC","ClearRecord"); //加载动态库,SYC 为库名,ClearRecord为调用方法
n.setRetVal(Type.INT); //设置方法返回值类型
n.setParameter(0, Type.STRING ,addr); //设置第一个参数值
n.setParameter(1, sm); //设置第二个参数值
n.invoke(); //执行
int result = n.getRetValAsInt(); //获得返回值
System.out.println("返回结果: " + result);
System.out.println("调用的DLL文件名为:"+n.getDLLName());
System.out.println("调用的方法名为:"+n.getFunctionName());
return result;
}
}
经过测试,对方返回了几个类型:PAnsiChar,String,Pchar.
来进行测试。
对于第一种PAnsiChar是能正确返回数据的。
对于String的方法,会出现乱码,原因和我或许和我猜想的一样。
对于Pchar的类型。 只能获取到第一个字符。
以上只是作为总结和猜想。另外jna.jar提供大家下载。
分享到:
相关推荐
实例中演示了各种参数形式的DLL函数调用,如:基本数据类型、基本数据类型的指针和引用、结构体、结构体的指针和引用、函数指针和回调函数、字符串指针、输入数组、输出数组等,非常实用。
java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)
研究java调用dll的时候,大部分都是通过jni,比较麻烦,我找到了通过jna方法调用dll的方法,用起来比较方便,只需要引用jna.jar包,这个jar包已经包含在程序中,还包含了我调用dll的遇到难道的解决办法。
jna调用dll实例,包含jna.jar包,有详细的调用过程注释,包括调用时的中文乱码处理。本实例还提供了32位和64位的dll试用文件。
采用java jna4.1 调用C编写的dll文件,获得返回结果,且获得返回参数的例子
自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途
MyEclipse 6.5 导入就可测试 绝对能跑起来 实现 java 通过 jna 包 调用dll
亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。
这个是使用JNA调用.dll文件或.so文件动态链接库的例子
问题描述: 在开发项目过程中,需要处理算法分析出来二进制流数据,并对数据解析处理转发。我们上层应用平台是使用java开发的...那现在上层应用面临的问题:访问java外部功能接口实现方式(即调用dll)怎么选择及实现?
使用JNA加载C++的dll库实战 完整实例的代码 https://blog.csdn.net/huanzhongying/article/details/88706250
JAVA 利用JNA调用C程序32位或者64位dll 实例,直接解压运行。
一个java通过jna调用C++ dll库的列子,包括C++dll中含回调函数,回调java方法
java调用c++动态库例子,NetSdk.dll 文件拷贝至JDK/bin目录下
Java使用JNA调用TSCLIB来控制热敏打印机生成二维码并打印,对纸张的定位做了控制,不会出现连续打印后纸张位置错位,需要自己准备TSCLIB.dll文件,放在Windows/System32下,代码可以直接使用。
JNA方式实现Java调用dll的必用jar包
java 调用大华 SDK Dll 实现视频播放的例子
Java通过JNA调用系统API示例,调用 Kernel32.dll文件中的GetLocalTime(),GetSystemTime(),SetLocalTime()方法。
前一段时间接了个项目,需要用到第三方提供的C#编写的dll,本身项目是java语言,所以便有了下面这篇文章,本文给大家介绍了关于java中如何使用jna调用c#中dll的相关资料,文中通过示例代码介绍的非常详细,需要的...
Java通过JNA调用C库函数