`
jxdiamond
  • 浏览: 104479 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java中调用dll动态库的简洁方法

    博客分类:
  • java
 
阅读更多
解压JNative-1.3.2.zip 获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。JNativeCpp.dll Windows下用的,拷到windows / system32目录下;

  libJNativeCpp.so Linux下使用的;

  JNative.jar 这是一个扩展包,加载到你的程序中就可以。

  一个简单例子

  
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”不用也 可以, 常量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());
   }catch(Exception ex){
     ex.printStackTrace();
   }finally {
     if (n != null)
     try {
        n.dispose();
     }catch (NativeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     }catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     } // 记得释放
   }
   return 0;
}
 
  public static void main(String[] args) throws NativeException, IllegalAccessException{
   JNativeTest.messageBox(100,“这是使用jnative练习”, “jnativetest”, 1);
   }
}


  关于linux下编译 C代码部分说明:

  对于linux不同版本,可能会导致libJNativeCpp.so不同

  原带的libJNativeCpp.so 是在glic2.4下编译的

  为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在for gcc3.4.6 glibc 2.3下。

  编译办法:

  在JNative-1.3.2-src\JNativeCpp\Release目录下

  1、备份calls.o和 asm_io.o这两个Object文件

  2、make clean

  3、恢复到当前目录calls.o和 asm_io.o这两个Object文件

  4、make

  目前已经修改了Release目录下的makefile和subdir.mk文件,使得在make clean的时候不删除calls.o和 asm_io.o两个文件

  附:linux 动态库搜索路径:

  export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

  makefile 文件

  ################################################################################

  # Automatically-generated file. Do not edit!

  ################################################################################

  -include 。./makefile.init

  RM := rm -rf

  # All of the sources participating in the build are defined here

  -include sources.mk

  -include subdir.mk

  -include objects.mk

  ifneq ($(MAKECMDGOALS),clean)

  ifneq ($(strip $(C++_DEPS)),)

  -include $(C++_DEPS)

  endif

  ifneq ($(strip $(CC_DEPS)),)

  -include $(CC_DEPS)

  endif

  ifneq ($(strip $(C_DEPS)),)

  -include $(C_DEPS)

  endif

  ifneq ($(strip $(CPP_DEPS)),)

  -include $(CPP_DEPS)

  endif
分享到:
评论

相关推荐

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    Java调用DLL源代码

    Java调用DLL是Java开发中一个重要的技术主题,它允许Java程序与本地操作系统API或者其他C/C++编写的动态链接库进行交互。在Java中,有多种方法可以实现这个功能,其中最常用的是Java Native Interface (JNA) 和 ...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    本文将深入探讨这两种方法,以及如何在Java中调用C语言编写的SO(Linux下的动态链接库)和DLL(Windows下的动态链接库)中的函数。 首先,JNI是Java官方提供的原生接口,允许Java代码直接与本地代码交互。在Java中...

    jna jar实现java调用dll

    标题"jna jar实现java调用dll"指的是使用JNA库来在Java程序中调用Windows平台上的动态链接库(DLL)文件。JNA通过jar包的形式提供服务,使得Java开发者可以方便地将DLL的功能集成到Java应用中。 描述中提到...

    java使用(jna)调用c/c++第三方动态库 dll文件 所用jar包

    Java 使用 JNA(Java Native Access)调用C/C++编写的第三方动态库(DLL文件)是一种常见的技术,它允许Java程序直接与本地操作系统接口交互,而无需编写JNI(Java Native Interface)代码。JNA 提供了一种相对简洁...

    java调用动态库实例

    总结,Java调用动态库实例展示了如何利用JNA和JNative在Java中调用本地函数,既适用于独立的Java应用,也适用于Web项目。JNA提供了更简洁的接口,而JNative则提供了对本地代码的直接访问。理解并掌握这两种技术,将...

    java调用C或者C++动态库dll测试jar包和测试dll

    综上所述,Java调用C或C++动态库主要依赖于JNA库,它为开发者提供了一个简洁的方式来集成非Java代码。通过定义接口和调用其方法,Java程序可以直接使用DLL的功能,极大地扩展了Java的适用范围。在实际开发中,需要...

    在Java程序中使用JNative调用dll文件

    在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...

    pos机java调用程序demo(基于dll调用)

    在本文中,我们将深入探讨如何使用Java调用DLL库,特别是在银联POS机接口的集成应用上。这个项目是基于JDK1.8开发的,它利用了Maven作为项目管理工具,使得开发者能够更方便地引用和管理DLL库。对于那些在IT行业,...

    Java调用动态库.pdf

    Java 调用动态库是 Java 语言中的一种技术,用于调用动态链接库(DLL),从而实现与native 代码的交互。下面将详细介绍 Java 调用动态库的知识点。 一、使用 JNI 调用动态库 JNI(Java Native Interface)是一种...

    JNA调用C++动态库,传入二维数组,通过C++返回二维数组,java调用C++完整案例

    这里,"EasyLogdll"是你的C++动态库的名称,根据实际情况可能需要加上.dll或.so等后缀。 在C++端,你需要实现`processArray`函数,处理输入的二维数组并返回结果到输出数组。注意,C++的二维数组在内存中是一维连续...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    这就涉及到如何在Java中调用DLL的问题。 #### 方案选择:JNA vs JNI 在Java中调用外部C/C++函数的传统方式是使用JNI(Java Native Interface)。然而,JNI的使用过程相对繁琐,涉及多个步骤,包括编写C/C++接口代码...

    JNA java调用dll

    在标题"JNA java调用dll"中,我们关注的核心技术就是Java通过JNA来调用动态链接库(DLL)文件,这是在Java中实现跨平台 native 功能的一种方法。 DLL是Windows操作系统中的一个重要概念,它包含了一系列可被不同...

    jna java 调用c动态库

    Java Native Access(JNA)是一种开源的Java框架,它为Java程序员提供了一种简洁的方式来调用C动态库(如.dll、.ocx、.so),大大简化了原本繁琐的JNI(Java Native Interface)调用过程。JNA由SUN公司主导开发,它...

    Java使用JNA调用C动态库的方法.zip

    为了在Java中实现这一目标,常用的方法是使用Java本地接口(JNI)。然而,JNI需要复杂的本地代码编写和编译,这就为Java开发带来了一定的复杂性。Java本地访问(JNA)是一个很好的替代方案,它允许Java应用程序直接...

    Java调用动态库最简便方法.pdf

    ### Java调用动态库最简便方法 #### 引言 在跨语言开发中,Java调用其他语言(如C/C++)编写的动态链接库(DLL)是一种常见的需求。传统上,这种调用通常依赖于Java Native Interface (JNI),但这种方法涉及到较为...

    java调用DLL、activeX框架 njawin

    Java调用DLL(动态链接库)和ActiveX控件是跨平台编程中常见的技术,尤其在需要与Windows系统原生功能交互时。`njawin`框架为Java开发者提供了一个简便的方法来实现这一目标,使得Java应用程序能够利用DLL和ActiveX...

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

    本文主要讨论了两种方法,使得Java应用程序能够调用由Delphi开发的DLL动态链接库。这两种方法分别是:通过JNI(Java Native Interface)和使用JNA(Java Native Access)第三方组件。 1. **JNI调用Delphi开发的DLL*...

    Java类中调用dll的步骤及jar包

    首先,Java调用dll主要依赖于Java本地接口(Java Native Interface, JNI)。JNI允许Java代码与本地代码(如C++或C)进行交互。为了在Java中使用dll,你需要遵循以下步骤: 1. **创建Java接口**:定义一个Java接口,这...

    java调用本地化(dll)实用文档

    - **优势**:相较于传统的JNI,使用JNA可以避免复杂的适配器编写工作,仅需在Java中定义接口和代码即可直接调用DLL或SO中的函数。 - **应用场景**:适用于需要与操作系统底层交互的应用场景,如硬件控制、系统服务...

Global site tag (gtag.js) - Google Analytics