作者gorocky (哇沙咪)
看板java
标题[问题] JNI传递参数问题(Pointer)
时间Tue Nov 27 13:22:04 2012
JNI和JNA可以同时运行吗?
范例
==Java==
public class Test{
public static void main(String[] args) {
...
com.sun.jna.Pointer Image1=Ins.cvLoadImage("dog.jpg", 1);
Test t=new Test();
BufferedImage bufimg=t.ToBufferImage(Image1);
}
public native BufferedImage ToBufferImage(com.sun.jna.Pointer img);
static{
System.loadLibrary("opencv_core243");
System.loadLibrary("opencv_highgui243");
System.loadLibrary("opencv_imgproc243");
System.loadLibrary("t");//透过GCC产生的DLL档
}
}
==C==
JNIEXPORT jobject JNICALL Java_Test_ToBufferImage
(JNIEnv *env, jobject obj, IplImage *img)
{
CvSize size = cvGetSize(img);
...
jobject bufferedImage=....
...
return bufferedImage;
}
问题:
不知怎麽让Java传递com.sun.jna.Pointer 到C当中?
如果JNI和JNA不能同时运行的话,试过用Jlong的方式,但也失效?
不知哪出问题?
==Java==
BufferedImage bufimg=t.ToBufferImage(Image1.getLong(0));
public native BufferedImage ToBufferImage(long img);
==C==
JNIEXPORT jobject JNICALL Java_Test_ToBufferImage
(JNIEnv *env, jobject obj, jlong l)
{
IplImage *img;
*img=l;
}
是在C转换的地方写错呢?还是不是该用Jlong的方式转?
能否请板上的大大指点给方向?谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.97.145
1F:→ gorocky:也试了IplImage *img=(IplImage *)l; 11/27 13:43
2F:→ gorocky:搞定了... 11/27 14:01