我有一个使用c++库的android项目,我需要将对象数组发送到c++代码。 这是我的Java本机绑定(bind)代码 class MyLib { public static native void testArray(String[] array); } 这就是我所说的 ... MyLib.testArray(new Object[20]); ... 这是我的c++ jni代码: JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(J…

2020年12月2日 0条评论 34点热度 阅读全文

目标比方说,我们有一个大型的C++应用程序,它可以执行一些大型工作,而使用C++可以很好地完成这些工作。但是,有很多逻辑,我们希望在JVM上运行。问题为了测试上述方法,我使用CLion创建了small C++ project。场景是:构建(由CMake自动执行): 带$JAVA_HOME/lib/jvm.lib的 链接代码段 使用刚创建的$JAVA_HOME将所有DLL从exe复制到目录 跑: 创建嵌入式JVM 调用此JVM托管的静态方法 我尝试了Visual Studio 2019社区和MinGW64(x86_6…

2020年12月1日 0条评论 43点热度 阅读全文

我试图在现有项目中将Smart IDReader SDK试用版(https://habr.com/en/company/smartengines/blog/332670/)与Gradle(组装成war-archive的项目)一起使用。该应用程序工作站是centOS,我不需要支持本机库的所有体系结构。因此,我有libjniSmartIdEngine.so本机lib和jniSmartIdEngineJar.jar。还在SDK c++ * .h文件和* java SWIG类中提供。我正在尝试: 添加jar和/ resou…

2020年11月30日 0条评论 35点热度 阅读全文

我的问题是,假设我有一个带有单例的c++类,并且通过JNI方法调用了这个单例,每次我从java调用到c++时,单例变量是否因为其静态而更改了,还是保持不变?每次我从Java调用C++时,它是否在新线程上运行该方法,还是没有? 示例代码: 在Java中: class NativeLib { public native void updateFrame(); } 在C / C++中: JNIEXPORT void JNICALL Java_com_Company_NativeLib_NativeLib_updateFr…

2020年11月29日 0条评论 46点热度 阅读全文

我希望用Java编写的Stanford Core NLP的功能在C++中可用。为此,我正在使用Java本机接口(interface)。我有一个Java对象,该对象以更容易从C++调用的方式包装了多个函数。但是,当我调用这些函数时,C++不会等到这些函数完成后再移至下一个函数。 Java对象具有我用于测试的Main函数,该函数调用用于测试目的的所有适当函数。仅运行Java时,它可以完美运行。批注等待设置完成(这需要一段时间),而获取依赖项的函数将等待批注功能完成。完全预期和正确的行为。当我开始从C++调用Java函数…

2020年11月29日 0条评论 40点热度 阅读全文

我试图在Eclipse中的Java应用程序中使用dll,但是每当我尝试调用与该dll相关联的任何方法时,都会遇到运行时异常。 该dll位于以下地址中,该地址已在Eclipse中的“运行/调试设置”中通过: -Djava.library.path="C:\Program Files\NPortAdminSuite\ipserial\lib\x86;${env_var:PATH}" 码: 班级考试{ public native int nsio_init(); public static void main(Strin…

2020年11月29日 0条评论 33点热度 阅读全文

我正在尝试构建一个C++文件,以便通过JNI在我的Android应用程序中使用。我正在使用Cygwin在Windows中构建。我对此完全陌生,不知道我在做什么。 这是输出的一部分: $ g++ -c test_wrap.cxx -I"C:\dev\android-ndk-r4b\build\platforms\android-4\arch-arm\usr\include" -I./include In file included from C:/dev/android-ndk-r4b/build/platforms…

2020年11月28日 0条评论 47点热度 阅读全文

在android中,我使用pthread_create创建本机线程,然后在Callback过程中,调用FindClass以获取Java类。但它不起作用。我从android jni tips获得提示我在FindClass from any thread in Android JNI中找到了解决方案 我这样修改我的项目[编辑] JavaVM* gJvm = nullptr; static jobject gClassLoader; static jmethodID gFindClassMethod; JNIEXPORT…

2020年11月25日 0条评论 45点热度 阅读全文

我正在尝试从C++调用非静态Java方法。 Sample2.java: public class Sample2 { public int intMethod(int n) { return n*n; } } JNITest.cpp: #include "stdafx.h" #include <iostream> #include <string> #include <memory.h> #include <jni_md.h> #include <jni.h&g…

2020年11月25日 0条评论 43点热度 阅读全文

有一个C++函数,可以通过JNI从Java代码调用。我想将基础的c字符串正确地传递给Java,因此我做了以下安排: // main.cpp string global; const char* data () // Called externally by JNI { return (global = func_returning_string()).data(); // `.data()` = `.c_str()` } 但是在这种情况下,函数 data()不再是线程安全的。 在传递字符串而不引起任何未定义行为的同…

2020年11月25日 0条评论 34点热度 阅读全文