jni调用C程序dll产生的疑惑,300分寻找大虾

fentid 2001-10-16 01:22:15
加精
任务:调用一个C写的dll里面的一个方法
步骤:1,写一个newdll包含jni要的接口,再调用olddll
2,用java的native方法调用newdll,结果程序在olddll的
方法里面终止,非正常退出。
java的native方法传递一个String给C,
fileName=(*env)->GetStringUTFChars(env,jFileName,0);
abs_rtn=RunDllTest(fileName);//这里终止了程序
(*env)->ReleaseStringUTFChars(env, jFileName, fileName);
printf("return:%d",abs_rtn);
最后printf没有输出东西。奇怪的是我用C写的main方法调用该dll结果是
正确的,abs_rtn返回0。
void main(int argc,char *arg[]){
int abs_rtn;
abs_rtn=RunDllTest(arg[1]);
printf("return:%d",abs_rtn);
}
问题:java传递String和C本身传递有区别吗?先用GetStringUTFChars把String 的unicode转换成ascii码字符串了,其中还存在问题?在java调用中fileName输出是正确的,用printf输出看说明调用和传递成功了,但程序在使用该变量的方法里面终止了,问题何在呢??
...全文
168 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Jax 2002-01-15
谢谢
  • 打赏
  • 举报
回复
zosatapo 2001-11-12
可以把你的dll源代码贴出来看一看。因为我实在不是很明白说的事情到底是怎么一回事情。
谢谢
  • 打赏
  • 举报
回复
gdsean 2001-10-17
参考Shared Stubs JNI Example
  • 打赏
  • 举报
回复
fentid 2001-10-16
新情况:我不从java传递参数过去,直接使用
RunDllTest("text");写个参数给C,结果依然
RunDllTest方法下面的printf就不执行了。。。
那么RunDllTest使整个程序退出了,会不会是
内存超出jvm界限了??
  • 打赏
  • 举报
回复
glazetiger 2001-10-16
fileName=(*env)->GetStringUTFChars(env,jFileName,0);后首先把fileName中的内容memcpy到另一个char*中,另外,你RunDllTest()函数做了什么操作?
  • 打赏
  • 举报
回复
fentid 2001-10-16
不行,程序依然在RunDllTest(fileName)方法退出了
  • 打赏
  • 举报
回复
gdsean 2001-10-16

jboolean iscopy=JNI_FALSE;
或者JNI_TRUE,不知道有什么不同,看看哪个可以就
用咯
  • 打赏
  • 举报
回复
gdsean 2001-10-16
应该这样:
jboolean iscopy;
const char *fileName= (*env)->GetStringUTFChars(
env, jFileName, &iscopy);
  • 打赏
  • 举报
回复
gdsean 2001-10-16
http://java.sun.com/docs/books/tutorial/native1.1/stepbystep/index.html
上面都很简单的调用,他问的是调用成功出现的问题。
“在java调用中fileName输出是正确的,用printf输出看说明调用和传递成功了,但程序在使用该变量的方法里面终止了,问题何在呢??”
我看是jvm和C变量转变问题,
fileName=(*env)->GetStringUTFChars(env,jFileName,0);函数有问题
fileName指向的字符串应该复制一份到C程序中
  • 打赏
  • 举报
回复
skyyoung 2001-10-16
http://java.sun.com/docs/books/tutorial/native1.1/stepbystep/index.html
  • 打赏
  • 举报
回复
gdsean 2001-10-16
char * jtrue;
jtrue=0x01;
fileName=(*env)->GetStringUTFChars(env,jFileName,jtrue);
或者传递array试试
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2001-10-16 01:22
社区公告
暂无公告