`

Java调用dll与C++通讯

阅读更多
整体思路分为三步: java 方的代码开发;VC++方的代码开发; 如何在Tomcat下的部署使得java web可以访问此DLL接口。
第一部分:java 方的代码开发
第一步:在java方用Eclipse新建一个java web的Project.
第二步:在源文件目录下,新建一个CallSoftDll类,代码如下:
package com.mycompany.call;
/**
 * @author sech
 * 
 * @version 1.0
 */
public class CallSoftDll {

	public native static int get();

	public native static void set(int i);

	static {
		System.loadLibrary("com_mycompany_call_CallSoftDll");
	}

		public static void main(String[] args) {
		// TODO 自动生成方法存根
		CallSoftDll test = new CallSoftDll();
		test.set(10);
		// test.add(2, 5);
		// System.out.println(test.add(2, 5));
		System.out.println("successdfdsfsd!!");
		System.out.println(test.get());
		System.out.println("success!!");
	}
}

保存后,并构建,如果构建成功;继续往下看。
第三步:打开项目所在目录下的classes目录,我的目录为:
F:\WorkSpace\Project\root\WEB-INF\classes
在这里新建run.bat文件,在文本编辑器中打开该文件,添加代码如下:
javah -classpath . -jni com.mycompany.call.CallSoftDll
第四步:双击run.bat文件运行后,在该目录下出现一个com_mycompany_call_CallSoftDll.h文件,代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_mycompany_call_CallSoftDll */

#ifndef _Included_com_mycompany_call_CallSoftDll
#define _Included_com_mycompany_call_CallSoftDll
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_mycompany_call_CallSoftDll
 * Method:    get
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_get
  (JNIEnv *, jclass);

/*
 * Class:     com_mycompany_call_CallSoftDll
 * Method:    set
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_mycompany_call_CallSoftDll_set
  (JNIEnv *, jclass, jint);

/*
 * Class:     com_mycompany_call_CallSoftDll
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_add
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

网站可以直接调用CallSoftDll类,完成操作.
到此为止,java方的工作基本完成。
第二部分:VC++方的代码开发
打开Microsoft Visual C++可视化的工具,新建name为com_mycompany_call_CallSoftDll的项目
第一步:将JAVA_HOME文件夹下的
JAVA_HOME\include\jni.h
JAVA_HOME\include\win32\jni_md.h
和第一部分java项目中生成的com_mycompany_call_CallSoftDll.h
将这三个头文件拷贝到项目的Header files目录下。
第二步:根据头文件编辑Utill.app文件,代码如下。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_mycompany_call_CallSoftDll */

#ifndef _Included_com_mycompany_call_CallSoftDll
#define _Included_com_mycompany_call_CallSoftDll
#ifdef __cplusplus
extern "C" {
#endif
int i = 0; 
/*
 * Class:     com_mycompany_call_CallSoftDll
 * Method:    get
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_get
  (JNIEnv *, jclass){
return i;
}

/*
 * Class:     com_mycompany_call_CallSoftDll
 * Method:    set
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_mycompany_call_CallSoftDll_set
  (JNIEnv *, jclass, jint j){
i=j;
}

#ifdef __cplusplus
}
#endif
#endif

第三步:编辑com_mycompany_call_CallSoftDll.def文件,代码如下:
; com_mycompany_call_CallSoftDll.def : Declares the module parameters for the DLL.
LIBRARY      "com_mycompany_call_CallSoftDll"
DESCRIPTION  'com_mycompany_call_CallSoftDll Windows Dynamic Link Library'
EXPORTS
     Java_com_mycompany_call_CallSoftDll_add
 
第四步:
构建项目(快捷键为:Ctrl+F5).
如果构建项目OK的话,继续下面的工作。
默认在你的项目下出现你所需要的DLL文件。
我的出现在: D:\XP\Program Files\Microsoft Visual Studio\MyProjects\Utill\Debug文件夹下。
第五步:
点击“组建”菜单,选择下面的“配制..”
选择Win32 Release 点击关闭。
第五步:
点击“工程”下的“设置”,选择“使用MFC作为静态连接库”,点击确定即可。
到这里完成。
再次点击构建项目(快捷键为:Ctrl+F5)。
如果也没有问题的话,在
D:\XP\Program Files\Microsoft Visual Studio\MyProjects\Utill\Release文件下会出现你要的DLL文件。
第六步:区别
Debug和Release文件夹下的两个相同的DLL文件的区别:
都是实现了java接口的功能。
不同的是Debug目录下生成的那个Dll文件是用在装有Microsoft Visual C++ 6.0环境的机器上的。而Release目录下的那个DLL是用在没有装过Microsoft Visual C++ 6.0环境的机器上的。
第三部分:
如何在Tomcat下的部署使得java web可以访问此DLL接口
第一步:将生成的文件放在哪里?有两种情况:
如果是java应用程序调用的话,就放置在我的机器是win xp 我就放在system32文件夹下。
如果是java web 开发的话,就是放置在JAVA_HOME的根目录下的bin文件夹下。
第二步:将eclipse下的java web项目,在tomcat下进行部署,并运行.
到此如何用java 调用DLL文件结束。

注:
当类中有package时进行包.类的打包
生成的dll文件要放在%JAVA_HOME%\bin目录下
另:
dll生成过程未经测试,可能有所纰漏,但dll打包前的步骤都是正确的,也可以确保熟悉c++的人成功生成dll文件(我使用的dll文件是别人直接生成的,因我不会c++开发   )
参考资料:http://www.zone99.cn/redirect.php?tid=308&goto=lastpost
http://www.pconline.com.cn/pcedu/empolder/gj/java/0506/642328.html
分享到:
评论
2 楼 zzknight 2009-08-14  
不知所云~~~~
1 楼 Tom是只猫 2008-04-19  
什么玩艺阿,乱其八糟

相关推荐

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

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

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

    Java调用C++ DLL文件是跨语言编程中的一个重要应用场景,特别是在既有Java代码库又有C++动态链接库的情况下。本文将详细讲解如何在Java程序中调用C++编写的DLL文件,以及一个可用的示例。 首先,理解Java与C++交互...

    JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单

    下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,使得Java代码能够调用本地代码(如C和C++),反之亦然。JNI接口包括了各种函数,让开发者可以...

    JAVA调用DLL方法 JAVA调用DLL方

    ### JAVA调用DLL方法 在跨平台开发领域中,Java作为一种强大的编程语言,因其具有良好的移植性和跨平台性而被广泛使用。然而,在某些特定情况下,我们可能需要调用本地库(例如DLL文件)来实现特定功能或提高性能。...

    java调用c++ dll的示例

    在提供的压缩包"java调用dll示例"中,可能包含了Java源代码、C++源代码、生成的DLL文件以及相关的构建和运行脚本。通过研究这些示例,你可以更深入地了解如何将这些步骤应用于实际项目中。理解并掌握这一技术对于...

    java调用C++写的dll的实例

    Java调用C++编写的DLL动态链接库是跨语言交互的一种常见方式,主要利用了Java的JNI(Java Native Interface)技术。JNI允许Java代码与其他编程语言进行原生代码交互,包括C、C++等。本实例将详细讲解如何在Java项目...

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

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

    Java调用dll示例

    总结来说,Java调用DLL主要涉及JNI的使用,包括在Java中声明native方法,生成JNI头文件,编写C++代码实现接口,编译链接DLL,以及在Java中加载和调用DLL。这个过程允许Java开发者充分利用C++的高性能特性,同时保持...

    JNI实例 Java调用DLL c++调用Java

    总之,JNI实例“Java调用DLL c++调用Java”是一个实用的学习资源,它详细解释了如何利用JNI进行Java与C++的交互,无论是将本地库引入Java程序还是将Java功能嵌入C++应用。通过实践这些例子,开发者能够深入理解JNI的...

    Java调用DLL源代码

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

    java调用dll新

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

    JAVA项目JNI调用dll实现DEMO源码,C++&JAVA

    完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...

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

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

    java调用DLL文件

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

    Java调用dll实现des加密解密

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

    JAVA如何调用dll:用JNI调用C或C++动态联接库

    Java 调用DLL(动态链接库)主要是通过JNI(Java Native Interface)技术来实现的。JNI是Java平台标准的一部分,允许Java代码和其他语言写的代码进行交互。在本例中,我们将详细介绍如何使用JNI调用C或C++编写的DLL...

    JAVA调用C/C++ DLL文件方法

    JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java ...

    Java调用Qt DLL

    Java调用Qt DLL是一个跨平台的技术实践,涉及到Java与C++之间的互操作性,其中Qt是一个流行的C++库,主要用于图形用户界面开发。这个主题主要包含以下几个知识点: 1. **JNI(Java Native Interface)**:JNI是Java...

    java调用dll文件的实例

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

Global site tag (gtag.js) - Google Analytics