【急急急】JNI调用C++dll获取硬盘信息,【只有】在命令提示符下调用才成功返回硬盘信息(返回自定义常量没有问题)

yymimang 2013-06-26 05:26:01
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,都是一样的空值。
工作空间也换过了,依然没用。

求大家帮帮忙,
...全文
251 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yymimang 2013-07-02
  • 打赏
  • 举报
回复
引用 8 楼 shnulaa 的回复:
右键 myeclipse.exe,属性, 以管理员的权限执行的钩选上,再试试呢。
成了,感谢啊,结贴了
晓风吹雾 2013-06-27
  • 打赏
  • 举报
回复
右键 myeclipse.exe,属性, 以管理员的权限执行的钩选上,再试试呢。
yymimang 2013-06-26
  • 打赏
  • 举报
回复
引用 4 楼 shnulaa 的回复:
1 在dll中加入写log文件的操作,将详细的log以文件的形式输出来,然后再分析。 主要要分析,有没有返回正确的内容 2 控制台和myeclispe主要区别是环境变量的区别,这可能会导致可能会调用到不同的dll文件,比如说有2个相同的dll,一个在工程目录,一个在系统system32下面, 以上是思路,望对你有帮助。
刚又测试了下,只在“管理员:命令提示符”可以成功获取。 普通cmd下和MyEclipse下依然不行。 看来是管理员权限的问题,怎么让Java代码以管理员身份来运行?
yymimang 2013-06-26
  • 打赏
  • 举报
回复
引用 4 楼 shnulaa 的回复:
1 在dll中加入写log文件的操作,将详细的log以文件的形式输出来,然后再分析。 主要要分析,有没有返回正确的内容 2 控制台和myeclispe主要区别是环境变量的区别,这可能会导致可能会调用到不同的dll文件,比如说有2个相同的dll,一个在工程目录,一个在系统system32下面, 以上是思路,望对你有帮助。
应该不是后者,我试试写log。
小丑哥_V5 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 yymimang 的回复:
[quote=引用 2 楼 shadowsick 的回复:] 这个换个jdk版本就不识别了?那么夸张...你又不是跨大的版本...不了解具体情况...
你没注意看我说的是什么。 JNI调用返回硬盘信息,只能在“命令提示符”下成功获取。 在工程中使用返回空值和0 尝试更换jdk版本依然不能解决问题。(jdk1.6和jdk1.5下) 并不是换了jdk才导致的问题[/quote] 那先随便写个接口,调用dll的接口方法,随便返回简单类型的看看,然后再使用复杂类型数据看看
晓风吹雾 2013-06-26
  • 打赏
  • 举报
回复
1 在dll中加入写log文件的操作,将详细的log以文件的形式输出来,然后再分析。 主要要分析,有没有返回正确的内容 2 控制台和myeclispe主要区别是环境变量的区别,这可能会导致可能会调用到不同的dll文件,比如说有2个相同的dll,一个在工程目录,一个在系统system32下面, 以上是思路,望对你有帮助。
yymimang 2013-06-26
  • 打赏
  • 举报
回复
引用 2 楼 shadowsick 的回复:
这个换个jdk版本就不识别了?那么夸张...你又不是跨大的版本...不了解具体情况...
你没注意看我说的是什么。 JNI调用返回硬盘信息,只能在“命令提示符”下成功获取。 在工程中使用返回空值和0 尝试更换jdk版本依然不能解决问题。(jdk1.6和jdk1.5下) 并不是换了jdk才导致的问题
小丑哥_V5 2013-06-26
  • 打赏
  • 举报
回复
这个换个jdk版本就不识别了?那么夸张...你又不是跨大的版本...不了解具体情况...
yymimang 2013-06-26
  • 打赏
  • 举报
回复
人工置顶~

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧