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

看板java作者 (哇沙咪)時間13年前 (2012/11/27 13:22), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/2 (看更多)
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 13:43, , 1F
也試了IplImage *img=(IplImage *)l;
11/27 13:43, 1F

11/27 14:01, , 2F
搞定了...
11/27 14:01, 2F
文章代碼(AID): #1Gj4t_q0 (java)
文章代碼(AID): #1Gj4t_q0 (java)