草庐IT

hello-jni

全部标签

java - 包装 C++ 对象的最佳 JNI 模式?

我正在开发一个JavaAPI,其中许多Java对象实际上是等效C++对象的包装器。Java对象创建C++对象,并负责在不再需要它们时释放它们。我想知道为此使用的最佳模式,我可以看到两个可能的选项:使用静态native方法调用和最终变量来保存native句柄,在构造函数中构造C++对象。publicabstractclassNativeBackedObject1implementsjava.lang.AutoCloseable{protectedfinallong_nativeHandle;protectedfinalAtomicBoolean_nativeOwner;protected

java - 你能用 Apache Thrift 代替 JNI 吗?

我刚刚接触到Thrift,最近开始使用JNI。据我所知,Thrift为您提供了定义不同语言之间接口(interface)的工具(如果我错了请纠正我)。根据我的经验,JNI似乎在Java和C++之间做了类似的工作。我想知道是否可以使用Thrift来完成我目前在JNI中执行的任务。如果是,我应该为哪些任务使用Thrift,我应该在什么时候使用JNI?谢谢! 最佳答案 当您在不同进程之间进行通信时,您应该使用thrift或类似的RPC库。在同一进程中在Java和C之间传递方法调用时,可以使用JNI。使用thrift的成本大约比使用JNI高

java - JNI : Library is Found on Path, 但方法不是 (java.lang.UnsatisfiedLinkError)

我正在尝试使用JNI并获取java.lang.UnsatisfiedLinkError。与其他数百万个问题不同,我在我的路径上有这个库,甚至在我删除它时看到了异常变化。我确定我创建的dll有问题,但我不确定是什么。这是我的java类代码:packagecom;publicclassTune{static{System.loadLibrary("lala");}publicstaticvoidmain(String[]args){Tunej=newTune();System.out.println("2+6="+j.add(2,6));}nativepublicintadd(intx,i

java - 比较 JNI 对象引用

我通过JNI从C++调用Java方法。Java方法返回枚举状态。我的C++代码中已经有代表枚举的工作对象,如下所示:https://stackoverflow.com/a/17441151/3352197jclassclSTATUS=env->FindClass("MyClass$STATUS");jfieldIDfidONE=env->GetStaticFieldID(clSTATUS,"ONE","LMyClass$STATUS;");jobjectSTATUS_ONE=env->GetStaticObjectField(clSTATUS,fidONE);所以,电话jobjecto

java - 将 c++ 映射转换为 jobject JNI?

我想将C++映射传输到Java,但不知道如何定义返回参数以使该方法有效。我对string或int作为返回参数没有任何问题,但我无法让map工作。我的Java方法如下所示:privatenativeMapsayHello();我的C++代码是:#include#include"stdafx.h"#include"jni.h"#include"HelloJNI.h"#include#include#include#includeusingnamespacestd;JNIEXPORTjobjectJNICALLJava_HelloJNI_sayHello(JNIEnv*,jobject){m

c++ - OpenCL Hello World

我刚刚开始在opencl中工作,目前正在opencl中开发一个相对基本的hello_world程序。不幸的是,该程序没有输出正确的短语或任何东西,而是挂起而没有输出。知道为什么会这样吗?下面是:openglsource.cpp和hello.cl#defineCL_USE_DEPRECATED_OPENCL_2_0_APIS#include#include#includeintmain(){std::vectorplatforms;cl::Platform::get(&platforms);autoplatform=platforms.front();std::vectordevices

c++ - ("hello"+ 1) VS ( *"hello") + 1 VS (* ("hello"+ 1)) 之间的差异

我一直在分配以下作业来解释3个语句中发生的事情,但我无法弄清楚。cout为什么数字2是数字而不是字符?第一个仍然有零字符吗?(结束字符串) 最佳答案 *"hello"给出字符串的第一个字符,'h',类型为char,具有ASCII值104.整数提升规则是指,当添加char和int时,char被转换为int,给出int类型的结果。输出int给出数值。是的。字符串文字是一个以零字符结尾的数组。将其地址加一会得到指向数组第二个字符的指针;数组的其余部分没有变化,因此末尾仍然包含零。 关于c++-

c++ - 如何通过 JNI/NDK 获取 Android 应用程序中使用的 C++ 库的日志行(printf、cout 等)的控制台输出

在我的Android应用程序中,我通过JNI使用nativeC++库。如果它在Debug模式下构建,该库会生成日志行。我想将日志行重定向到logcat。所以我在Debug模式下创建了库,NDK_DEBUG=1被使用并且LOCAL_LDLIBS+=-llog已设置。我的设备没有root但我设置了:$adbshell停止$adbshellsetproplog.redirect-stdiotrue$adbshell启动就像在http://developer.android.com/tools/debugging/debugging-log.html#viewingStd中描述的那样在这里Is

Java 泛型和 JNI

是否可以使用采用通用参数的JNI调用nativeCPP函数?类似于以下内容:publicstaticnativeTfoo(Uu,Vv);然后这样调用它://classFoo,classBar,classBazarealreadydefined;Foof=foo(newBar(),newBaz());任何人都可以向我提供实际执行此操作的示例或网络上执行此操作的一些教程吗?我问是因为在我的CPPJNI函数(由JVM调用)中,我收到不满意的链接错误。CPP代码如下:JNIEXPORTjobjectJNICALLJava_Processor_process(JNIEnv*env,jclassp

[JavaScript] 第二章 hello world和重要概念

春花秋月何时了,往事知多少。此付费专栏不要订阅,不要订阅,听人劝。🌹作者主页:青花锁🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄🌹简历模板、学习资料、面试题库、技术互助🌹文末获取联系方式📝系列专栏目录[Java项目实战]介绍Java组件安装、使用;手写框架等[Aws服务器实战]AwsLinux服务器上操作nginx、git、JDK、Vue等[Java微服务实战]Java微服务实战,SpringCloudNetflix套件、SpringCloudAlibaba套件、Seata、gateway、shadingjdbc等实战操作[Java基础篇]Java基础闲聊,已出HashMap