Tag: jni

如何调用使用JNI从C返回String的Java方法?

有没有办法调用java方法,它在C中返回一个String ? 对于Integer它的工作原理如下: JNIEXPORT jint JNICALL Java_Client_getAgeC(JNIEnv *env, jobject callingObject, jobject employeeObject) { jclass employeeClass = (*env)->GetObjectClass(env, employeeObject); jmethodID midGetAge = (*env)->GetMethodID(env, employeeClass, “getAge”, “()I”); int age = (*env)->CallIntMethod(env, employeeObject, midGetAge); return age; } 我已经搜索了很长时间但是没有什么能用于String 。 最后,我想得到一个char* 提前致谢!

将jobject与值相关联

jclass object = (*env)->FindClass(env,”java/lang/Integer”) // C Code 有什么办法可以将整数值与object相关联吗? 我希望object包含/指向整数。

Java中的链接错误

我收到以下错误: Exception in thread “main” java.lang.UnsatisfiedLinkError: model.JNIResultSet.getSpieler()[Lmodel/Spieler; at model.JNIResultSet.getSpieler(Native Method) at model.JNIResultSet.main(JNIResultSet.java:18) 我的java类看起来像这样: package model; public class Spieler { private String vorname; private String nachname; private int trikotnummer; public Spieler(String vorname, String nachname, int trikotnummer) { this.vorname = vorname; this.nachname = nachname; this.trikotnummer = trikotnummer; } } 和 package model; public class JNIResultSet { public […]

Java JNI:将多字节字符从java传递给c

我再一次搞乱java natve界面,我遇到了另一个有趣的问题。 我正在通过jni向c发送文件路径,然后进行一些I / O. 所以我遇到的最常见的问题是‘äåö’ 。 这是一个具有完全相同问题的程序的简短演示: Java的: public class java { private static native void printBytes(String text); static{ System.loadLibrary(“dll”); } public static void main(String[] args){ printBytes(“C:/Users/ä-å-ö/Documents/Bla.txt”); } } C: #include “java.h” #include JNIEXPORT void JNICALL Java_java_printBytes(JNIEnv *env, jclass class, jstring text){ const jbyte* text_input = (*env)->GetStringUTFChars(env, text, 0); jsize size = (*env)->GetStringUTFLength(env, text); […]

我有两个非常相似的C函数从python和Java调用。 如何将2个库合并为1个可以从两种语言调用的库?

基本上我有2个C函数“encrypt”的实现,我使用ctypes和java使用JNI从python调用。 我被告知要使用两个用于java和python的动态库,并将它们组合成一个可以从两者中调用的静态库。 为了澄清,这里是使用JNI的Java的C函数实现: #include “jniTest.h” #include JNIEXPORT void JNICALL Java_jniTest_passBytes (JNIEnv *env, jclass cls, jbyteArray array) { unsigned char *buffer = (*env)->GetByteArrayElements(env, array, NULL); jsize size = (*env)->GetArrayLength(env,array); for(int i=0; iReleaseByteArrayElements(env, array, buffer, 0); } 因此,该函数接受一个字节数组,并将每个字节递增1,然后返回新字节数组的每个元素。 这是java方面: class jniTest{ public static native void passBytes(byte[] bytes); static{ System.loadLibrary(“encrypter”); { public static void main(String[] args){ Tester tester […]

JNI本机代码上的内存泄漏

我有一段JNI本机代码。 当我们调用此本机方法+运行其他请求时,jvm将崩溃。 最有可能的是,这段JNI本机方法(c代码)中存在内存泄漏。 任何正文可以帮助检测下面代码中的内存泄漏? #include #include #include #include “fns_data.h” #include “fns_client.h” #include “sockRW.h” #include “/usr/local/include/jni.h” #include “JNIiSearchLib.h” #include “com_eds_wise_util_JNIiSearchLib.h” JNIEXPORT jstring JNICALL Java_com_eds_wise_util_JNIiSearchLib_jniFNSSearchClient ( JNIEnv *env, jobject obj, jstring jip_addr, jint jport_number, jstring jfield, jstring jquery_str, jint jhitnum) { HitIds *hit_list = NULL; hitListPktStruct *hitPkt = NULL; int hit_number = 0; int i = 0; […]

堆腐败 – Android原生代码中的SEGV_MAPERR

我正在尝试为流AES加密创建一个小型库,我开始基于Facebook Conceal项目( https://github.com/facebook/conceal )开展我的工作,只是更改了一些内容并改进了本机的包装以支持密码用填充物。 它工作正常,它可以解密文件没有问题,但是当我处理大流时,我得到随机的堆内存损坏,经过大量的时间调试,我一直无法找到错误。 这是我的代码: https://gist.github.com/frisco82/9782725 我试图找到内存分配或免费问题,但几乎没有malloc或free,而jni调用应该是安全的,openssl也是如此(我编译了自己但隐藏提供的也失败了) CheckJni没有任何警告,虽然上下文处理有点开箱即用,但它看起来并没有破坏(事实上Android的密码似乎使用了类似的东西)。 此外,如果有人可以指向我的Android本机AES多步骤(多个更新调用)库,我将切换到那个并忘记这一点。 错误时常变化,但通常与他的相似: 03-26 10:33:02.065: A/dalvikvm(2475): @@@ ABORTING: DALVIK: HEAP MEMORY CORRUPTION IN mspace_malloc addr=0x0 03-26 10:33:02.065: A/libc(2475): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 2494 (AsyncTask #1) 03-26 10:33:02.205: I/DEBUG(933): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** […]

Java JNI错误java.lang.UnsatisfiedLinkError:xxxx()V

今天我和JNI度过了一段艰难的时光,基本上我想要做的是将OpenAlpr集成到我的Java项目中,我使用的是预编译的二进制文件,当我运行java_test.bat文件时,它可以很好地工作。 起初Java一直告诉我它无法找到openAlprJni然后我将dlls的路径添加到我的构建路径和系统路径,之后我开始体验openAlprJni.Alpr.initialize(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V根据文档意味着库本身不行,但是由于测试程序正在运行,它已经可以了,我已经查看了各种论坛,甚至还与OpenAlpr的作者OpenAlpr但是仍然不能解决这个问题,这里有谁有类似的问题帮我解决这个问题? 提前致谢。

JNI- unpinned primitve数组错误

我想在图像处理中实现反转效果。 我在java端解码颜色通道,我将2D数组传递给C端,我反转(255值)然后我返回一个处理过的2D数组。 这是我的C代码: #include #include #include #include JNIEXPORT jobjectArray JNICALL Java_com_example_invert_MainActivity_inv (JNIEnv *env, jobject obj, jobjectArray arr, jint w, jint h) { double a[w][h][3]; int i,j,k; double x = 0; ///////////////////READING THE INPUT ARRAY//////////////////////// jsize dim1 = (*env)->GetArrayLength(env, arr); for (i=0; iGetObjectArrayElement(env, arr, i); int dim2 = (*env)->GetArrayLength(env, line1); jdouble *pos1 = (*env)->GetDoubleArrayElements(env, line1, 0); […]

JNIexception访问冲突

目前我正试图和JNI一起玩。 我的Java代码: public class test{ static{ System.loadLibrary(“wakeup64”); } public static native boolean setWakeupTime(Date date); public static void set(){ Date d = new Date(); setWakeupTime(d); } } C代码: #include #include “cpp_interface.h” #include JNIEXPORT void JNICALL Java_test_setWakeupTime (JNIEnv *env, jclass cl, jobject date){ printf(“test”); } int main(){ } 代码编译得很好但如果我运行我的java类我得到一个exception_access_violation: # # A fatal error has been detected […]