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

java调用dll文件

    博客分类:
  • java
阅读更多

在java中调用C/C++写的dll库文件的步聚如下:

 

1. 建立一个java project ,然后新建一个类代码如下:

 

 

package com.lib;

public class TestMylib {
	
	static{
		System.loadLibrary("TestMylib");
	}
	
	public native int add(int a, int b);    
	
	public static void main(String args[]){
		
		int a = 1;        
	    int b = 5;
	    int c = 0;
	    TestMylib test1 = new TestMylib();   
	    c = test1.add(a,b);
	    
	    System.out.println("c = " + c);
		
	}
}

 

2. 然后利用javah 根据上面类的.class 文件生成 *.h 文件,如:javah com.lib.TestMylib   这里的路径一定要是.class文件的路径。

 

3. 在vc++的开发环境中新建一个动态连结库工程,然后把生成的*.h文件添加到工程中,然后把jdk中的 jni.h、 jni_md.h  添加到工程中,然后在工程中实现调用的函数。

 

4. 编译生成dll库文件。

 

5. 然后把生成的dll文件复制到java project的根目录下。

 

6. 运行java项目,得如下结果,表示成功

 

 

c = 6

 

注意:如果在命令行中运行带有包名的文件,我还没有实验成功,总是打不到dll文件,感觉dll的文件的位置放的不正确, 一直没有解决。

 

另外:

   1. 如下出现下列错误,表示dll文件的位置没有放正确。

Exception in thread "main" java.lang.NoClassDefFoundError: com\lib\TestMylib (wrong name: com/lib/TestMylib)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
1)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com\lib\TestMylib.  Program will exit.

 

2. 如果出现下列错误,则是方法名拼写有错误与使用javah生成的 .h 文件中的不一致。

 

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.lib.TestMylib.add(II)I
	at com.lib.TestMylib.add(Native Method)
	at com.lib.TestMylib.main(TestMylib.java:17)
 

注意:现在有一些开源的工具,可以实现此功能,比这个要简单,如jacob, jawin等开源软件

1
5
分享到:
评论
2 楼 zxsqi 2012-07-10  
存在即为合理 写道
你们会用到这样的情况吗

会用到啊。。。
1 楼 存在即为合理 2012-07-10  
你们会用到这样的情况吗

相关推荐

    java调用DLL文件

    总结来说,Java调用DLL文件主要依赖于JNative库,通过定义Java接口、加载DLL、获取函数句柄、创建代理对象以及调用函数等步骤实现。这种方法使得Java开发者能够充分利用C/C++库的功能,同时也保持了Java的跨平台特性...

    Java调用dll文件开源组件jar包及说明文档

    Java调用DLL文件是软件开发中的常见需求,尤其是在Java与C/C++混合编程时。`JNative-1.3.2`是一个开源组件,专门设计用于帮助Java应用程序调用Windows平台上的DLL(动态链接库)文件,同时也支持Linux平台下的SO...

    java调用dll文件的实例

    Java调用DLL文件是将Java程序与C/C++编写的动态链接库集成的一种技术,主要通过JNI(Java Native Interface)来实现。JNI是Java平台的标准部分,它允许Java代码和其他语言写的代码进行交互。在本实例中,我们将探讨...

    几行代码轻松搞定 java 调用 dll 文件中的函数

    ### Java调用DLL文件中的函数 #### 知识点概览 本文将详细介绍如何在Java环境中调用DLL(动态链接库)文件中的函数,并通过一个具体的示例来演示这一过程。主要内容包括: - Java Native Access (JNA) 库的介绍与...

    JAVA调用DLL方法 JAVA调用DLL方

    通过本文的介绍,我们可以看到Java调用DLL文件不仅可行,而且有多种方式可以选择。其中,JNative提供了一种简单直接的方法,大大降低了调用本地库的难度。对于那些希望利用Java的强大功能同时又需要调用特定DLL文件...

    Java调用dll实现des加密解密

    总的来说,通过Java调用DLL实现DES加密解密涉及了Java和C/C++的混合编程,需要理解JNI的工作原理,以及如何在C/C++中与DLL交互。这个过程对于那些希望在Java中利用已有的本地库功能的开发者来说是至关重要的。

    亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。

    Java调用DLL函数是跨平台编程中的一种常见需求,特别是在Java与C/C++代码交互时。JNA(Java Native Access)是Java平台上的一个库,它允许Java代码直接调用本机库(如DLL文件)的函数,而无需编写JNI(Java Native ...

    Java调用动态链接库(Java 调用 DLL)

    在实际项目中,Java调用DLL通常用于利用已有的C/C++库,或者执行一些Java不擅长的任务,如硬件控制、图形处理等。然而,由于涉及到本地代码,这也会增加程序的复杂性和维护难度,因此在选择这种方法时需要权衡利弊。...

    jni_java_dll_jsp.zip_Java调用dll_applet_java Applet_java dll jsp_j

    Java调用DLL文件是将Java程序与C/C++编写的动态链接库进行交互的技术,主要应用于需要利用非Java原生功能或与已有C/C++库集成的场景。本资料包"jni_java_dll_jsp.zip"提供了关于这个主题的详细资料,特别是针对...

    jna jar实现java调用dll

    在本文中,我们将深入探讨如何使用JNA jar包来实现Java调用dll文件。 首先,理解JNA的工作原理至关重要。JNA依赖于Java的反射机制,通过接口定义(Interface)来映射本地库中的函数。当你在Java中定义一个接口并...

    Java调用DLL源代码

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

    java调用C#封装的dll方法

    ### Java调用C#封装的DLL方法 #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java...

    Java加载dll,导致Java进程内存泄露

    JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互,比如通过DLL来调用C或C++编写的函数。 内存泄漏通常发生在本地代码(如DLL)中,因为Java垃圾收集器无法管理非Java对象的内存。当Java对象...

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

    调用DLL文件的过程通常包括以下几个步骤: 1. **创建DLL**:首先,你需要使用C或C++编写一个DLL文件,其中包含将被Java调用的函数。这些函数需要按照JNI的规范来编写,即使用`JNIEXPORT`和` JNICALL`宏,以及指定...

    java调用dll最简单的方法

    在Java中调用DLL(Dynamic Link Library)文件,可以使用Java的本地方法接口(JNI,Java Native Interface)来实现。JNI允许Java程序与本地代码进行交互,从而实现跨平台的功能。

    java调用dll接口

    3. `java调用dll.txt`:这个文本文件很可能包含了关于如何使用Java调用DLL的具体步骤、示例代码或者注意事项。 调用DLL的过程通常分为以下几个步骤: 1. **引入JNA库**:首先,在Java项目中添加`jna.jar`和`jna-...

    java调用dll新

    总结,Java调用C++ DLL的过程主要包括:编写C++ DLL、创建Java JNI接口、生成JNI头文件、实现JNI接口并编译为DLL、最后在Java程序中加载和调用DLL。这个过程虽然有些复杂,但能充分利用现有C++库,拓展Java的功能。...

    非常好用java调用c++ dll文件demo

    5. **调用DLL方法**:现在,Java程序可以通过JNI接口调用DLL文件中的函数。 在提供的"java_dll_sample"压缩包中,可能包含以下元素: - `Java调用C++ DLL的Java类`:这个类会声明`native`方法,并在运行时通过`...

    JAVA调用C#写的DLL例子

    在本篇文章中,我们将详细介绍如何使用 JAVA 调用 C# 编写的 DLL 文件。首先,我们需要了解什么是 DLL 文件,以及它在编程中的应用。 DLL 文件是一种动态链接库文件,它可以被多个程序同时使用,减少了代码的重复...

Global site tag (gtag.js) - Google Analytics