Java调dll

008 - 02 - 22

Java调用dll与C++通讯

关键字: java 调用 dll c++ 通讯
整体思路分为三步: java 方的代码开发;VC++方的代码开发; 如何在Tomcat下的部署使得java web可以访问此DLL接口。 
第一部分:java 方的代码开发 
第一步:在java方用Eclipse新建一个java web的Project. 
第二步:在源文件目录下,新建一个CallSoftDll类,代码如下: 
Java代码 
  1. package com.mycompany.call;  
  2. /** 
  3.  * @author sech 
  4.  *  
  5.  * @version 1.0 
  6.  */  
  7. public class CallSoftDll {  
  8.   
  9.     public native static int get();  
  10.   
  11.     public native static void set(int i);  
  12.   
  13.     static {  
  14.         System.loadLibrary("com_mycompany_call_CallSoftDll");  
  15.     }  
  16.   
  17.         public static void main(String[] args) {  
  18.         // TODO 自动生成方法存根  
  19.         CallSoftDll test = new CallSoftDll();  
  20.         test.set(10);  
  21.         // test.add(2, 5);  
  22.         // System.out.println(test.add(2, 5));  
  23.         System.out.println("successdfdsfsd!!");  
  24.         System.out.println(test.get());  
  25.         System.out.println("success!!");  
  26.     }  
  27. }  

保存后,并构建,如果构建成功;继续往下看。 
第三步:打开项目所在目录下的classes目录,我的目录为: 
F:/WorkSpace/Project/root/WEB-INF/classes 
在这里新建run.bat文件,在文本编辑器中打开该文件,添加代码如下: 
javah -classpath . -jni com.mycompany.call.CallSoftDll 
第四步:双击run.bat文件运行后,在该目录下出现一个com_mycompany_call_CallSoftDll.h文件,代码如下: 
C++代码 
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class com_mycompany_call_CallSoftDll */  
  4.   
  5. #ifndef _Included_com_mycompany_call_CallSoftDll  
  6. #define _Included_com_mycompany_call_CallSoftDll  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. /* 
  11.  * Class:     com_mycompany_call_CallSoftDll 
  12.  * Method:    get 
  13.  * Signature: ()I 
  14.  */  
  15. JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_get  
  16.   (JNIEnv *, jclass);  
  17.   
  18. /* 
  19.  * Class:     com_mycompany_call_CallSoftDll 
  20.  * Method:    set 
  21.  * Signature: (I)V 
  22.  */  
  23. JNIEXPORT void JNICALL Java_com_mycompany_call_CallSoftDll_set  
  24.   (JNIEnv *, jclass, jint);  
  25.   
  26. /* 
  27.  * Class:     com_mycompany_call_CallSoftDll 
  28.  * Method:    add 
  29.  * Signature: (II)I 
  30.  */  
  31. JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_add  
  32.   (JNIEnv *, jclass, jint, jint);  
  33.   
  34. #ifdef __cplusplus  
  35. }  
  36. #endif  
  37. #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文件,代码如下。 
C++代码 
  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class com_mycompany_call_CallSoftDll */  
  4.   
  5. #ifndef _Included_com_mycompany_call_CallSoftDll  
  6. #define _Included_com_mycompany_call_CallSoftDll  
  7. #ifdef __cplusplus  
  8. extern "C" {  
  9. #endif  
  10. int i = 0;   
  11. /* 
  12.  * Class:     com_mycompany_call_CallSoftDll 
  13.  * Method:    get 
  14.  * Signature: ()I 
  15.  */  
  16. JNIEXPORT jint JNICALL Java_com_mycompany_call_CallSoftDll_get  
  17.   (JNIEnv *, jclass){  
  18. return i;  
  19. }  
  20.   
  21. /* 
  22.  * Class:     com_mycompany_call_CallSoftDll 
  23.  * Method:    set 
  24.  * Signature: (I)V 
  25.  */  
  26. JNIEXPORT void JNICALL Java_com_mycompany_call_CallSoftDll_set  
  27.   (JNIEnv *, jclass, jint j){  
  28. i=j;  
  29. }  
  30.   
  31. #ifdef __cplusplus  
  32. }  
  33. #endif  
  34. #endif  

第三步:编辑com_mycompany_call_CallSoftDll.def文件,代码如下: 
C++代码 
  1. ; com_mycompany_call_CallSoftDll.def : Declares the module parameters for the DLL.  
  2. LIBRARY      "com_mycompany_call_CallSoftDll"  
  3. DESCRIPTION  'com_mycompany_call_CallSoftDll Windows Dynamic Link Library'  
  4. EXPORTS  
  5.      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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值