Tag: jni

JNI – 使用ByteBuffer参数的本机方法

我有一个方法: public native void doSomething(ByteBuffer in, ByteBuffer out); 由javah生成的C / C ++此方法的头是: JNIEXPORT void JNICALL Java__MyClass_doSomething (JNIEnv *, jobject, jobject, jobject, jint, jint); 如何从jobject(即ByteBuffer实例)获取数据数组?

在Android中使用OpenCV的本机function

我想使用OpenCV + Android,使用原生函数。 但是我有点困惑如何使用位图作为参数以及如何返回已编辑的位图(或Mat)的值。 所以例如我有一个原生函数: #include #include #include JNIEXPORT ??? JNICALL Java_com_my_package_name_and_javaclass_myFunction(JNIEnv* env, jobject javaThis, cv::Mat mat1){ //here will be code to perform filtering, blurring, canny edge detection or similar things. //so I want to input a bitmap, edit it and send it back to the Android class. return ??? } 所以我在这里使用cv :: Mat作为参数。 我知道这是错的,但我不确定它应该是什么,以及在相应的java类中应该是什么。 […]

JNI如何访问Java Object(Integer)

我有一个JNI方法来访问返回Integer对象的java方法。 我不想返回原始int类型,因为将修改此代码以处理Generic对象。 以下是我所拥有的。 我无法获得通过的Integer的值。 C ++方面的输出类似于 value = 0x4016f3d0 如何获得我在C ++端传递的Integer对象的实际值? 请帮忙。 谢谢, -H GenericPeer.cpp JNIEXPORT void JNICALL Java_GenericPeer_print (JNIEnv *jenv, jclass jcls, jobject data){ jclass peerCls = jenv->GetObjectClass(data); jmethodID mGetValue = jenv->GetMethodID(peerCls, “getValue”,”()Ljava/lang/Integer;”); if(mGetValue == NULL){ return (-1); } jobject value = jenv->CallObjectMethod(data, mGetValue); cout<<"value = "<<value<<endl; } GenericPeer.java public class GenericPeer { public […]

如何在Eclipse中生成JNI头文件

我正在使用Eclipse生成JNI头文件。 我查看了program files\java\jre6\bin并找到了很多.exe和.dll文件,但我找不到使用JNI创建与C库绑定的文档中的命令javah 。 有帮助吗?

如何在Java程序中调用DLL中的方法

我试图使用JNA调用DLL中的方法。 到目前为止已经加载了DLL Runtime.getRuntime().load(“myworkspace/test.dll”); 这个dll包含了我需要访问的方法。 如何在Java文件中执行DLL中的方法。 我是否创建一个对象或DLL的某些东西,然后在点运算符后获取方法名称。

正确地将硬编码的byte 从JNI返回给Java

我想在JNI中对16字节数组进行硬编码并使用方法返回它。 这不起作用 static jbyteArray JNICALL getKeyBytes(JNIEnv *env, jobject thiz) { F_LOG; Mutex::Autolock _m(sLock); jbyteArray result; jbyte* resultType = new jbyte[16]; result = (*env)->NewByteArray(env, 16); //line 214 resultType = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30}; (*env)->SetByteArrayRegion(env, result, 0, 16, resultType); delete [] resultType; return result; } […]

无法解析相应的jni函数opencv Android

这是我得到错误。我正确加载opencv库但我得到这个错误。如果我进入ximgproc所有本机方法都红色标记为“无法解析相应的jni函数name_function”。我如何解决? protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); //Log.i(“prova”,uri.toString()); ImageView imageView = (ImageView) findViewById(R.id.imageView); // imageView.setImageBitmap(bitmap); Mat g=new Mat(bitmap.getHeight(),bitmap.getWidth(), CvType.CV_8UC1); Utils.bitmapToMat(bitmap,g,true); SuperpixelSLIC […]

用C ++编写的JNI将文件读取到jbyteArray

我正在UNIX中编写一个C ++程序来生成一个共享库,该库将使用JNI在java中调用。 这个C ++程序必须在UNIX框中读取文件,然后必须将其转换为jbyteArray (JNI数据类型),以便JAVA可以使用它。 我用C ++将文件读入char*但无法转换为jbyteArray 。 请帮忙。 代码如下:: #include #include #include #include “com_sp_dll_NativeMethods.h” // this header file was generated by java using namespace std; JNIEXPORT void JNICALL Java_HelloWorld_displayMessage(JNIEnv *env, jobject obj) { printf(“Hello World!\n”); } JNIEXPORT jbyteArray JNICALL Java_com_sp_dll_NativeMethods_getFile(JNIEnv *env, jobject obj) { ifstream fl(“/home/rkannan/myFile.txt”); fl.seekg(0, ios::end ); size_t len = fl.tellg(); char […]

使用JNI在C中访问Java对象中的Java对象

我对JNI比较陌生,并且已经解决了使用JNI在Java对象中弄乱整数和数组的基础知识。 现在我正在尝试修改/访问Java对象中的Java对象。 我一直在互联网和Stack Overflow上搜索,还没有找到如何做到这一点。 这是一个例子。 在Java中: public class ObjectOne { private byte[] buff; … … } public class ObjectTwo { private ObjectOne obj; … … } 在JNI中,如何通过ObjectTwo从ObjectOne访问“buff”? 我试过这样的事…… JNIEXPORT void JNICALL Java_accessBuffThroughObjectTwo(JNIEnv *env, jobject obj, jobject objectTwo) { jclass clazz; jclass bufferClazz; jobject bufferJObject; clazz = (*env)->GetObjectClass(env, objectTwo); fid = (*env)->GetFieldID(env, clazz, “obj”, “Ljava/lang/Object;”); bufferJObject […]

从Java调用C#dll

我是一名Java开发人员。 但是,出于某种原因,我必须借助C#来完成我的任务。 我有下面提到的用于创建DLL的C#代码。 必须在我的Java程序中使用该DLL来完成所需的操作。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Interop.Word; namespace Yrl.Tracingtool { public class DocxUtil { public Application Jump(string fileName) { object fileNameAsObject = (object)fileName; Application wordApplication; try { wordApplication = new Application(); object readnly = false; object missing = System.Reflection.Missing.Value; wordApplication.Documents.Open(ref fileNameAsObject, ref missing, ref readnly, ref missing, ref […]