008
-
02
-
22
Java调用dll与C++通讯
关键字: java 调用 dll c++ 通讯
整体思路分为三步: java 方的代码开发;VC++方的代码开发; 如何在Tomcat下的部署使得java web可以访问此DLL接口。
第一部分:java 方的代码开发
第一步:在java方用Eclipse新建一个java web的Project.
第二步:在源文件目录下,新建一个CallSoftDll类,代码如下:
保存后,并构建,如果构建成功;继续往下看。
第三步:打开项目所在目录下的classes目录,我的目录为:
F:/WorkSpace/Project/root/WEB-INF/classes
在这里新建run.bat文件,在文本编辑器中打开该文件,添加代码如下:
javah -classpath . -jni com.mycompany.call.CallSoftDll
第四步:双击run.bat文件运行后,在该目录下出现一个com_mycompany_call_CallSoftDll.h文件,代码如下:
网站可以直接调用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文件,代码如下。
第三步:编辑com_mycompany_call_CallSoftDll.def文件,代码如下:
第四步:
构建项目(快捷键为: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
第一部分: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