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++开发 :oops: )
参考资料:[url]http://www.zone99.cn/redirect.php?tid=308&goto=lastpost[/url]
[url]http://www.pconline.com.cn/pcedu/empolder/gj/java/0506/642328.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值