日期:2014-05-20  浏览次数:20731 次

【急急急】JNI调用C++dll获取硬盘信息,【只有】在命令提示符下调用才成功返回硬盘信息(返回自定义常量没有问题)
RT
操作系统:WIN8
JDK 1.6和1.5均尝试过了。

是一个获取硬盘信息的dll,vc++6.0编写。
文件结构:
getdiskinfo.dll [获取硬盘信息,返回一个硬盘信息的结构]
Diskinfo.java   [native方法类,内有Main函数,及对应C++中的结构信息]
TestGet.java    [Main方法调用Diskinfo.jar来获取]

1.控制台运行Diskinfo.class成功获取。

2.控制台运行TestGet.class调用Diskinfo.jar成功获取。

3.于是拿到MyEclipse 8.5中测试,调用调试。然后就杯具了,资料查了N多,程序也试N多遍

4.然后在MyEclipse中用Main函数测试返回值依然为空[char*转为jstring的返回值全部为空,DWORD转为char*然后再转为jstring的返回值全部为0]。

5.另加个方法在MyEclipse测试传入“123”然后再把传入的值返回回来,这样却能成功传出。

不知道是不是:能够获取到硬盘信息,但在工程中调用时,传递或者转换类型的过程中返回值变没了?
但是命令提示符(非管理员权限也可以)调用就没有问题

有没有哪位遇到上面的问题?怎么解决的?
jdk试过自己装的1.6,myeclipse带的1.6,1.5,都是一样的空值。
工作空间也换过了,依然没用。

求大家帮帮忙,
C++ JNI java myeclipse

------解决方案--------------------
引用:
Quote: 引用:

这个换个jdk版本就不识别了?那么夸张...你又不是跨大的版本...不了解具体情况...

你没注意看我说的是什么。

JNI调用返回硬盘信息,只能在“命令提示符”下成功获取。
在工程中使用返回空值和0
尝试更换jdk版本依然不能解决问题。(jdk1.6和jdk1.5下)
并不是换了jdk才导致的问题


那先随便写个接口,调用dll的接口方法,随便返回简单类型的看看,然后再使用复杂类型数据看看
------解决方案--------------------
右键 myeclipse.exe,属性, 以管理员的权限执行的钩选上,再试试呢。