草庐IT

JNI_CreateJavaVM

全部标签

java - 无法使用JNI从java调用C++的成员函数

我按照以下链接中给出的说明进行操作CallcfunctionfromJava之后我就可以调用C++函数了。但是现在我想从Java调用C++类的成员函数。为了清楚地描述它,我引用了下面的场景。java。有一个类叫做HelloWorld.java它有一个名为print()的原生函数现在使用Java的JNI我创建了HelloWorld的等效头文件。之后我写了实现HelloWorld.cpp中的这个头文件现在我想从“HelloWorld.cpp”调用“rectangle.cpp”的成员函数我创建了“矩形”对象,并且调用了它对应的函数。但是在编译代码时它给了我一个错误称为“未解析的外部符号”。在

c++ - 使用 JNI 调用 API 创建 java7 JVM

我们在Java7中有一个类,需要从native代码加载它。我已经将java6与JNI一起使用,但java6无法加载该类。所以我安装了新的JDK,更改了我的VC项目中的包含目录和链接引用等。一切都很好,直到我想从JNI启动jre7:JNI_CreateJavaVM采用vm_args.version参数中的java版本,但没有定义高于1.6的版本。JavaVMInitArgsvm_args;...vm_args.version=JNI_VERSION_1_6;vm_args.nOptions=2;vm_args.options=options;vm_args.ignoreUnrecogni

java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?

有一个C++函数,通过JNI从Java代码调用。我想将底层的c字符串正确地传递给Java,所以我做了以下安排://main.cppstringglobal;constchar*data()//CalledexternallybyJNI{return(global=func_returning_string()).data();//`.data()`=`.c_str()`}但在这种情况下,函数data()不再是线程安全的。在传递字符串而不导致任何未定义行为的情况下实现线程安全的最佳方法是什么? 最佳答案 Iwanttopasstheu

智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)

一、项目简介本项目是配合智慧自助餐厅下的一套综合系统,该系统分为安卓端、微信小程序用户端以及后台管理系统。安卓端利用图像识别技术进行识别多种不同菜品,识别成功后安卓端显示该订单菜品以及价格并且生成进入小程序的二维码,用户扫描后在小程序进行付款和提交订单,用户也可查看订单和菜品等信息,管理员在Web后台管理系统进行信息查看餐厅运营情况和管理菜品、订单评价等信息。本系统涉及的论文文献,可以进行参考和引用。《基于图像识别的智慧餐饮管理系统》《YOLOX-NanoIntelligentandefficientdishrecognitionsystem》二、涉及技术1、后端:SpringBoot、Spr

c++ - 使用 JNI (C++) 从 native 线程调用 Java 方法时出现问题

我有一个JNI问题,希望有人能帮我解决。我正在尝试从native线程调用名为LUSOutputJNI的Java类的构造函数。它在这个特定类的FindClass(...)上一直失败。代码如下:LOGE("1");JNIEnv*env=NULL;LOGE("2");intres=-1;res=g_vm->AttachCurrentThread(&env,NULL);if(env==NULL){LOGE("envisNULL,AttachCurrentThreadfailed");;}if(res>=0)LOGE("AttachCurrentThreadwassuccessful");jcl

java - 从 JNI 代码检查 Java 类中是否存在可选字段或方法

我有一个Java类,可以对其进行子类化以添加额外的字段。有一个相应的C++JNI方法将与该字段交互。但是,我希望JNI代码同时处理基类和子类,这意味着它必须检测该字段是否存在。我的(简化的)JNI代码如下所示:fid=j.GetFieldID(jc,UTF8_SECPARM,SIG_SECPARM);if(fid==0)return;...continuewithfid...虽然GetFieldID()方法返回NULL,但应用程序在处理的某个进一步点出现异常,这似乎与此代码无关。然而,它在某种程度上是相关的,因为如果我只是在GetFieldID()方法之前返回,则没有异常(except

java - JNI 字符串和 C 字符串

在JNI函数FindClass的文档中,我可以阅读有关参数name的信息:name:afully-qualifiedclassname(...)ThestringisencodedinmodifiedUTF-8.根据文档,修改后的UTF-8必须以双“\0”字符结尾:thenullcharacter(char)0isencodedusingthetwo-byteformatratherthantheone-byteformat这是否意味着我应该以这种方式从C中调用FindClass:FindClass("java/lang/String\0")即末尾有双'\0'?

java - JNI线程模型?

当我从Java调用C/C++时,JavaVM或JNI是否会创建一个新线程来运行C/C++代码,而我的Java线程正在等待?我问这个是因为我的C/C++代码在GPU上运行某些东西,我需要检查特定的缓冲区以取回结果。获得结果后,我需要再次调用我的Java函数。所以我在考虑在C++端创建一个线程,该线程不断检查缓冲区,一旦有一些数据可用,就会回调Java端。 最佳答案 JNI不会在后台创建任何新线程。native函数与调用native函数的java方法在同一线程中执行。反之亦然,当native代码调用java方法时,java方法与调用该方

java - 在 C++ 中的 Java native (JNI) 方法中,在 jdoubleArray 和 vector<double> 之间进行转换

我有一个C++dll,其中包含我需要在Java程序中使用的方法。我浏览了所有关于JNI的Sun文档,以及我在网上找到的大量教程,但我似乎无法找到我的代码的问题。事实上,相当一部分代码是从各种教程和Sun网站上剪切和粘贴的。我的具体问题如下:我的C++native方法从我的Java程序接收一个jdoubleArray,它需要映射到一个C++vector,然后该vector可以传递给C++dll中的一个方法。dll中的方法返回另一个vector,然后需要映射到一个新的jdoubleArray,并返回给Java程序。问题似乎是我没有正确执行映射。我的代码如下(为简单起见,我删除了对dll方法

c++ - jni 将字符串转换为字符数组

不熟悉c++,谁能帮我把cmd加到myStr数组,然后传给main()函数,这里是我目前所拥有的:JNIEXPORTvoidJNICALLJava_my_package_JNIActivity_callCmdLine(JNIEnv*env,jobjectobj,jstringcmd){constchar*nativeString=env->GetStringUTFChars(cmd,0);env->ReleaseStringUTFChars(cmd,nativeString);char*myStr[]={"v",nativeString};//intmain(intargc,char*