用JNI技术Java调用dll文件(由lib文件生成)

      现有两个文件chatting.h和chatting.lib,但没有源码,要在java中调用chatting中定义的方法print()。由于java只能调用dll文件,不能调用lib文件,因此,现在必须先将chatting.lib转换成chatting.dll,再由java调用。但现在的问题是,将chatting.lib直接转换成chatting.dll是非常困难的(目前还像还没有这样的工具,欢迎大家拍砖)。所以,想到了一个傻但比较有效的方法,那就是:将文件chatting.h和chatting.lib用VC生成一个新的DLL文件(取名为dllChatting.dll),由于要调用chatting中的print()方法,那么在dllChatting中定义一个dllPrint方法(该方法与print()方法相比,除了函数名不一样,返回值和参数列表都是相同的),然后在dllPrint()中直接调用print(),dllPrint()将自己的的参数传递给print(),返回print()的返回值。

 

解决办法如下:
第一步:编写java调用dll的程序callDLL.java

 

第二步:生成被java调用的接口文件callDLL.h。执行以下命令:

>javac callDLL.java

>javah callDLL

生成的callDLL.h内容如下

 

 

第三步:利用接口文件callDLL.h在VC(VS2008)中实现该函数功能,并生成callDLL.dll
     1. 创建dllChatting工程
         1) 选择"Win32 控制台应用程序"

 

选择Win32控制台应用程序

         2) 应用程序类型选择"DLL"

应用程序类型选择DLL

     2.  添加callDLL.hchatting.hchatting.lib到工程dllChatting中,并编辑dllChatting.cpp文件。

      1)添加callDLL.hchatting.h到工程:将这两个文件拷贝到dllChatting.vcproj的同级目录下,然后添加到头文件中。

      2)添加chatting.lib到工程:1)将文件chatting.lib拷贝到文件dllChatting.vcproj的同级目录下;2)项目->dllChatting属性->配置属性->连接器->输入,在“附加依赖项”中添加“chatting.lib”。

      3)编辑dllChatting.cpp如下:

 

    3.添加模块文件dllChatting.def,修改其内容如下。

 

      说明:在编译时,会提示找不到文件jni.h,可以将jni.h(在jdk的include 目录下)拷贝到工程目录下,然后将#include <jni.h>改为#include "jni.h"

第四步:用java调用callDLL.dll,检测是否成功。
将callDLL.dll拷贝到callDLL.java的同级目录下,执行以下命令:
>javac callDLL.java
>java callDLL
输出结果:
print in LIB: 1
print in DLL: 1
print in java: 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值