jni调用C程序dll产生的疑惑,300分寻找大虾
任务:调用一个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输出看说明调用和传递成功了,但程序在使用该变量的方法里面终止了,问题何在呢??