草庐IT

jni_generator

全部标签

java - 通过 jni 将每个引用的参数从 C++ 传递到 Java

我正在尝试通过JNI将每个引用的变量从C++传递到Java。一开始,我尝试了一些简单的代码:Javapublicstaticvoidinc(intval){System.out.println("inccalled:"+val);val++;}publicstaticvoiddec(intval){System.out.println("deccalled:"+val);val--;这应该简单地增加/减少使用Java方法在C++代码中创建的变量。C++部分如下所示:C++jmethodIDjDec=env->GetStaticMethodID(cls,"dec","(I)V");jme

c++ - VS2012 "Generating Code"大型硬编码数组速度慢

我们有一个工具可以在头文件中生成一个类,该文件是用硬编码数组生成的。自动生成的值由使用自动生成值的实际实现继承。自动生成的示例:classMyTestAutoGen{std::vectorm_my_parameter1;std::vectorm_my_parameter2;...public:MyTestAutoGen(){SetDefaultValueFor_my_parameter1();SetDefaultValueFor_my_parameter2();...}voidSetDefaultValueFor_my_parameter1(){inttmp[]={121,221,33

java - 有什么方法可以通过 JNI 获取指向 Java 数组的直接指针吗?

我需要通过JNI获取包含Java数组的直接内存地址的指针,而不调用某种复制(即直接访问)。GetArrayElements返回指向复制数组的指针-我需要能够直接从native层修改Java层上的int[]。从jintArray转换为int*成功返回内存地址,但我不确定这是否特别稳定...?这里有什么我可以做的吗...? 最佳答案 您可以使用直接内存(具有native字节顺序)的IntBuffer。在JNI中,您可以将地址用作指针。在Java中,您必须使用get()和put()。 关于ja

java - JNI FindClass 找不到使用 jar 的类

我正在开发一个项目,其中一些Java函数必须使用JNI从C++代码中调用。我已经尝试使用一个简单的Java类,但是当我开始在我的Java项目中使用额外的.jar时,JNI的FindClass函数找不到我的类。我做了一些研究并阅读了有关classpath的内容,如果它使用额外的库,编译.java文件需要它,但是FindClass返回null那种情况。这是我的代码的基本结构JavaVMOptionoptions[2];JNIEnv*env;JavaVM*jvm;JavaVMInitArgsvm_args;longstatus;jclasscls;jmethodIDmid;jintsquar

c++ - 提供给 std::generate 的仿函数可以是有状态的吗?

最近我读到,如果传递的仿函数是有状态的(有内部副作用),一些STL算法会有未定义的行为。我已经将std::generate函数与一个类似于(不太重要)的仿函数一起使用:classGen{public:explicitGen(intstart=0):next(start){}intoperator()(){returnnext++;}private:intnext;};与std::generate一起使用是否安全?生成值的顺序是否有保证?编辑:此处提出声明Statefulfunctors&STL:Undefinedbehaviour 最佳答案

c++ - 如何通过索引递增的generate_n填充STL容器

要用依赖于索引的值填充STL容器,我通常会像下面的代码那样编写。有没有办法在不声明索引的情况下做同样的事情?intmain(){staticintN=10;autofunc=[](intidx){returnidx*(idx+1)+1;};intidx=-1;std::listlst;std::generate_n(std::back_inserter(lst),N,[&](){idx++;returnfunc(idx);});} 最佳答案 您可以将索引移动到lambda捕获中并使lambda像这样可变(需要C++14):std::

【论文阅读笔记】Make-A-Character: High Quality Text-to-3D Character Generation within Minutes

【论文阅读笔记】分钟级别的高质量文本到3D角色生成AbstractIntroductionMethodLL/VM解析人脸面部属性并生成根据密集地标重建face/head形状几何生成纹理生成纹理提取漫反射反照率(DiffusionAlbedo)估计纹理矫正和补全头发生成(牛了)资产匹配实验未来工作paperhttps://arxiv.org/abs/2312.15430Demohttps://huggingface.co/spaces/Human3DAIGC/Make-A-CharacterCodehttps://github.com/Human3DAIGC/Make-A-CharacterPr

java - 如何在 JNI 中访问从 C++ 返回 java.lang.String 的 Java 方法的返回值?

我正在尝试从C++调用的Java方法传回一个字符串。我无法找出应该调用什么JNI函数来访问该方法并返回一个jstring值。我的代码如下:C++部分main(){jclasscls;jmethodIDmid;jstringrv;/**...omittedcode...*/cls=env->FindClass("ClassifierWrapper");mid=env->GetMethodID(cls,"getString","()Ljava/lang/String");rv=env->CallStaticMethod(cls,mid,0);constchar*strReturn=env-

java - 使用 JNI 加载另一个 JNI 库?

我需要实现一个本地方法,比方说“publicnativevoidsomeFunc();”。我有两个库,libabc.so和libdef.so。Java使用System.loadLibrary();加载libabc.so(它没有实现该方法),但JNI实现在libdef.so中。目前,我正在libabc.so中执行以下操作。JNIEXPORTjintJNICALLJNI_OnLoad(JavaVM*jvm,void*reserved){JNIEnv*env;jclasscls;jmethodIDget_load_id;jstringname;jvm->GetEnv((void**)&env

java - JNI 将空参数传递给 Java 方法

编辑我终于发现问题是由null值毕竟不是null引起的,因为其中一个构造函数没有将值初始化为零。有了这些知识,我想将我的问题改写为以下内容:如果参数应该为null,通过JNI将NULL/0/nullptr传递给Java方法是否安全?到目前为止,我找到的来源给出了不同的结果——其中一些人说在使用JNI时,C语言中的NULL和Java中的null是一回事。有些,例如remudada的回答中链接的那个,表明它可能不完全正确。老问题在使用JNI时是否可以使用空参数调用Java方法?我试过传递null(0、NULL或nullptr),但这会导致段错误。我也尝试过使用null参数的NewGloba