JNI中如何处理C的指针呀,比如文件指针有没有好的办法传递或处理呢???? 那是你的c语言代码啊。用一个c的class包装JNI,在这里调用其他的c的class。操作结果回传java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 传递一个c的指针到java中有用吗 当然有用不过有办法,比如我现在要写一个RandomAccessFile随机读取文件的Class。每个Class的实例需要指到一个文件指针上去。如果同时创建多个实例A,B,C分别读些三个文件AA,BB,CC,那么会同时打开三个文件。在C程序中执行时需要知道文件的指针吧。不过现在问题已经解决了。就是在DLL静态初始化一个数组(链表自然也可以了)每打开一个文件(实例化一个Class)在这个数组里作标识,然后就把这个标识返回Java。执行时读取当前class的标识指到正确的文件指针进行文件操作。现在麻烦的时无论如何都都没法把这个标识写回java.请大家看看我的代码:JNIEXPORT void JNICALL Java_CoreIOAccess_open(JNIEnv * env, jobject jo, jstring fileName, jboolean writeable){ ................................. newStream = fopen(name,openMode); jclass cl = env->GetObjectClass(jo); //这里找到并准备调用setOnlyFileId方法写一个ID号到java jmethodID setFileId = env->GetMethodID(cl,"setOnlyFileId","(J)V"); jvalue params[1]; //直接把指针地址写过去,在执行时通过判断地址执行相应文件操作 params[0].j = (jlong)newStream; stm = newStream; //执行有问题 env->CallVoidMethod(jo,setFileId,params); ................................. 这里无论我给什么执行的都是同一个东西,比如我给params[0].j为1或1234567或任何值最后的ID始终是一个不变的奇怪值比如1567356654322.后来被迫在setOnlyFileId(里再次调用一个native method返回了当前打开的file stream指针才成功,缺点就是这个必须在刚刚打开时执行,就是在class初始化,open file代码里执行,) 看编成思想看的郁闷 关于sslsocket的问题 大家有谁遇到过这种情况,帮一下忙,在线等,谢谢 名词解释----对象引用 JDBC连接SQLServer2000问题(怎么写就是不对,我已经打了sp4) 请各位大虾进来坐坐! jbuilder使用中的一个奇怪问题 这么一道算法题,放出来大伙思考思考。。。 oracle JDBC的问题 请大神告诉我!!关于泛型的转型问题. 提取可重用部分的有关准则 再问有关图形问题。在线等待!!谢谢
不过现在问题已经解决了。
就是在DLL静态初始化一个数组(链表自然也可以了)每打开一个文件(实例化一个Class)在这个数组里作标识,然后就把这个标识返回Java。执行时读取当前class的标识指到正确的文件指针进行文件操作。
现在麻烦的时无论如何都都没法把这个标识写回java.请大家看看我的代码:
JNIEXPORT void JNICALL Java_CoreIOAccess_open
(JNIEnv * env, jobject jo, jstring fileName, jboolean writeable)
{
.................................
newStream = fopen(name,openMode);
jclass cl = env->GetObjectClass(jo);
//这里找到并准备调用setOnlyFileId方法写一个ID号到java
jmethodID setFileId = env->GetMethodID(cl,"setOnlyFileId","(J)V");
jvalue params[1];
//直接把指针地址写过去,在执行时通过判断地址执行相应文件操作
params[0].j = (jlong)newStream;
stm = newStream;
//执行有问题
env->CallVoidMethod(jo,setFileId,params);
.................................
这里无论我给什么执行的都是同一个东西,比如我给params[0].j为1或1234567或任何值最后的ID始终是一个不变的奇怪值比如1567356654322.后来被迫在setOnlyFileId(里再次调用一个native method返回了当前打开的file stream指针才成功,缺点就是这个必须在刚刚打开时执行,就是在class初始化,open file代码里执行,)