草庐IT

hello-jni

全部标签

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

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

C++ Hello World 教程错误

我正在按照书中的示例学习C++,在输入并仔细检查后,我不断收到错误消息。我不知道出了什么问题。如果重要的话,我正在使用VisualC++2010。#includeusingnamespacestd;intmain(){//Prompttheuserfordatacout>b>>c;//Givefeedbackcout有四个错误。错误代码是:错误1errorC2678:binary'>>':nooperatorfoundwhichtakesaleft-handoperandoftype'std::istream'(orthereisnoacceptableconversion)i:\he

c++ - Visual Studio 2010 (Windows 7) 中的 Hello World C++ CUDA 程序

我正在尝试编译这个HelloWorldprogram在安装了VisualStudio2010的Windows7中,但在运行nvcchellocuda.cu时出现以下错误消息:nvccfatal:nvcccannotfindasupportedclversion.OnlyMSVC8.0andMSVC9.0aresupported如何编译这个CUDA程序? 最佳答案 NVCC从VisualStudio环境变量中检查VC++编译器版本。NVCC表示它仅支持MSVC8.0和9.0编译器。在您的情况下,您有MSVC10.0编译器。这个问题似乎

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

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-

c++ - 如何在linux内核模式下编程编译 "Hello World"代码?

是的,正如标题,我不知道如何在linux内核模式下编写和编译“HelloWorld”代码,请用最简短易懂的方式帮助我。谢谢!(也欢迎任何相关文件,我只是新手) 最佳答案 你可以开始Here:/**hello-1.c-Thesimplestkernelmodule.*/#include/*Neededbyallmodules*/#include/*NeededforKERN_INFO*/intinit_module(void){printk(KERN_INFO"Helloworld1.\n");/**Anon0returnmeansi

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

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