Re: [問題] JNI傳遞參數問題(Pointer)

看板java作者 (哇沙咪)時間13年前 (2012/11/27 14:05), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
自問自答好了(如果大家覺得是廢文,可以刪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

11/27 15:29, , 1F
雖然看不太明白,不過總比自問自解但是不答的人好 (y)
11/27 15:29, 1F

11/27 15:40, , 2F
沒碰連結到C的部分.... 看不懂.... 我好弱 QQ....
11/27 15:40, 2F

11/29 13:56, , 3F
原本直接傳 Image1 的話,會是一個 jobject ,並不是真的指
11/29 13:56, 3F
文章代碼(AID): #1Gj5WGyC (java)
文章代碼(AID): #1Gj5WGyC (java)