`

【java】试用JNA调用Delphi的dll方法。

    博客分类:
  • java
 
阅读更多
参考文章: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提供大家下载。
  • jna.jar (777.2 KB)
  • 下载次数: 55
分享到:
评论

相关推荐

    java用JNA调用dll实例,包含各种参数调用

    本实例将深入探讨如何使用JNA调用DLL,并涵盖了各种参数类型,包括基本数据类型、指针、结构体、回调函数、字符串以及数组。 首先,理解JNA的基本工作原理至关重要。JNA通过映射DLL中的函数到Java类的方法来实现...

    通过JNA让Java调用Dll方法

    研究java调用dll的时候,大部分都是通过jni,比较麻烦,我找到了通过jna方法调用dll的方法,用起来比较方便,只需要引用jna.jar包,这个jar包已经包含在程序中,还包含了我调用dll的遇到难道的解决办法。

    jna调用系统dll文件并且获得返回参数的实例

    采用java jna4.1 调用C编写的dll文件,获得返回结果,且获得返回参数的例子

    Java调用Delphi开发的Dll小结[归类].pdf

    2. **使用JNA调用Delphi开发的DLL**: - JNA是另一种调用本地代码的解决方案,相比JNI更简单,不需要额外的C层封装。 - 在Delphi中,创建DLL时,只需编写标准的Delphi函数,如`Hello`,并导出它。 - 在Java端,...

    基于JNA的java调用DLL动态库实例

    在实际使用JNA调用DLL前,需要定义一个接口来映射DLL中的函数。这个接口应该继承自JNA的`com.sun.jna.Library`接口。例如: ```java import com.sun.jna.Library; import com.sun.jna.Native; public interface ...

    java调用delphi动态库的实例

    - 最后,在Java应用程序中,我们可以直接调用`addNumbers`方法,就像调用任何其他Java方法一样。Java会自动处理底层的JNI调用: ```java public class Main { public static void main(String[] args) { Delphi...

    JAVA调用第三方DLL的方法

    在Java编程中,有时我们需要调用第三方的DLL(动态链接库)来实现特定的功能,这在集成外部系统或使用特定硬件设备时尤为常见。本文将详细介绍如何在Java中调用第三方DLL,以及在不同操作系统上的部署策略。 首先,...

    Java调用Delphi开发的Dll小结.pdf

    使用JNA调用Delphi DLL的步骤如下: - 创建Delphi DLL工程,但这次不需要`jni.pas`。编写一个简单的函数,如`Hello`。 - 导出`Hello`函数。 - 在Java端,引入JNA库,定义一个接口`CLibrary`,继承自`Library`,并...

    Java 通过JNA访问其它语言的dll文件

    总之,Java通过JNA调用Delphi编写的DLL涉及了Java接口的定义、参数类型转换以及内存管理等多个方面。在实践中,务必确保正确地处理这些细节,以确保跨语言通信的正确性和效率。同时,学习和理解DLL的内部工作原理,...

    Java调用Delphi开发的Dll小结[定义].pdf

    在Java中调用Delphi开发的DLL动态库主要可以通过两种方法:JNI(Java Native Interface)和JNA(Java Native Access)。这两种技术允许Java代码与本地代码进行交互,特别是对于需要调用非Java语言(如Delphi)编写的...

    Delphi10.3 中通过JNI调用 Java 函数

    然后,我们需要在Delphi中实现这个函数的具体逻辑,并通过JNI接口调用Java方法。例如,我们可以使用`FindClass`、`GetMethodID`等JNI函数获取Java类和方法的引用,再使用`CallVoidMethod`等函数执行Java方法。 ...

    C++、VB、DELPHI、JAVA调用DLL

    对于JAVA,原生的API并不直接支持DLL调用,但可以通过第三方库如JNA(Java Native Access)或JAWIN来实现。JAWIN库是本文中提到的JAVA调用DLL的方法,它提供了一种桥接,使得JAVA程序能够像操作JAVA类一样调用DLL中...

    调用DLL示例最新附加JNA

    基本上覆盖了目前主流的开发语言,DLL使用C++编写,演示了VB、C++、DELPHI、JAVA、C#、汇编、易语言调用这个DLL的方法。有些语言我提供了静态和动态2种调用方法。没有写的恕我孤陋寡闻,如果谁知道请联系我QQ:...

    Java调用动态链接库通用方法.doc

    ### Java调用动态链接库通用方法 #### 一、概述 在现代软件开发过程中,不同编程语言间的相互调用十分常见。例如,在Java程序中调用C语言编写的动态链接库(Dynamic Link Library,简称DLL),能够充分利用底层...

    几种语语调用dll的例子

    本篇文章将详细探讨如何使用四种不同的编程语言——C++、C#、Java和Delphi来调用DLL中的函数。 首先,我们来看C++的实现。在C++中,调用DLL主要通过`LoadLibrary`和`GetProcAddress`两个API函数。`LoadLibrary`用于...

    jna-4.5.0.jar

    项目是要求用JAVA来调用delphi提供的动态链接库,而且硬件厂商已经提供了库以及接口文档.由于以前没有接触过这样的问题,所以考虑到要跟硬件设备打交道,首先通过查相关的资料,得出在JAVA里面用JNI可以直接访问C提供的...

    虹软2.0人脸识别JNA封装

    JNA封装意味着将虹软的C/C++原生库转换为Java可以调用的接口,这包括定义native方法,通过JNA的结构体映射来处理复杂数据类型,并实现跨语言通信。开发者在Java项目中,通过这些封装好的接口,可以轻松调用人脸识别...

    IP网络对讲(世邦)开发SDK文档Demo及dll&ocx;

    对于Java开发者来说,尽管Java本身不直接支持DLL或OCX,但可以通过JNI(Java Native Interface)或JNA(Java Native Access)等技术来调用这些本地库。在实际开发中,开发者需要参照世邦提供的SDK文档,理解每个接口...

Global site tag (gtag.js) - Google Analytics