作者gorocky (哇沙咪)
看板java
标题Re: [问题] JNI传递参数问题(Pointer)
时间Tue Nov 27 14:05:02 2012
自问自答好了(如果大家觉得是废文,可以删XD)
==Java==
Pointer Image1=Ins.cvLoadImage(FilePath1, 1);
BufferedImage bufimg=t.ToBufferImage(Pointer.nativeValue(Image1));
...
public native BufferedImage ToBufferImage(long img);
...
==C==
JNIEXPORT jobject JNICALL Java_Test_ToBufferImage
(JNIEnv *env, jobject obj, jlong l)
{
IplImage *img=(IplImage *)l;
CvSize size = cvGetSize(img);
...
}
※ 引述《gorocky (哇沙咪)》之铭言:
: 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:→ PsMonkey:虽然看不太明白,不过总比自问自解但是不答的人好 (y) 11/27 15:29
2F:推 LaPass:没碰连结到C的部分.... 看不懂.... 我好弱 QQ.... 11/27 15:40
3F:推 stimim:原本直接传 Image1 的话,会是一个 jobject ,并不是真的指 11/29 13:56