随笔分类 - JNI
为了c++与Java的互调
摘要:本文将介绍JNI如何访问基本类型数组、对象数组(包括字符串数组)以及二维数组。可以使用GetArrayLength来获取数组的长度,使用GetIntArrayElements等函数直接访问基本类型数组中的元素,使用GetObjectArrayElement等函数访问对象数组和字符串数组,使用过程中确
阅读全文
摘要:在JNI中访问Java对象的属性,通常需要先获取属性的 jfieldID,然后使用相应的函数进行读写操作。 1、访问非静态属性 例1: //Java代码public class MyClass { private int mValue; public MyClass(int value) { mVa
阅读全文
摘要:1、String在C端的转换方式一 1)从 Java 到 JNI 到 C/C++,编码的转换过程 Java内部使用的是utf-16 16bit 的编码方式 JNI里面使用的是utf-8 unicode编码方式,英文是1个字节,中文3个字节 C/C++使用的是ascii编码,中文的编码方式 GB231
阅读全文
摘要:一、JNI 访问Java中的构造方法 JNIEXPORT jobject JNICALL Java_JniMain_accessConstructor(JNIEnv * env, jobject jobj) { //1.通过类的路径来从JVM里面找到对应的类 jclass jclz = (*env)
阅读全文
摘要:如果你想要在C或C++中创建一个Java对象,你需要使用JNIEnv提供的方法。 1、NewObject 方法 这个方法需要三个参数:一个类引用(jclass),一个构造函数Id(jmethodID),以及构造函数需要的参数。 // 1. 获取Person对应的jlcass对象 jclass per
阅读全文
摘要:一、JNI 中普通方法和静态方法的本地实现有什么区别? 1、JNI 定义native普通方法和静态方法 1 public class MyJniClass { 2 // native 普通方法 3 public native void NormalNativeMethod(); 4 5 // nat
阅读全文
摘要:在 JNI 中,获取 jclass 对象的方法主要有以下几种: 1、使用 FindClass 这是最常用的方法,通过类的全限定名来查找对应的jclass对象。 jclass clazz = env->FindClass("java/lang/String"); 2、使用 GetObjectClass
阅读全文
摘要:一、简述总结 在 JNI 规范中定义了三种引用:局部引用(Local Reference)、全局引用(Global Reference)、弱全局引用(Weak Global Reference)。 All Java objects returned by JNI functions are loca
阅读全文
摘要:在Java中,查看类的字段(成员变量)和方法签名通常可以通过反编译类的字节码来实现。你可以使用javap命令行工具来查看已编译类的字段和方法签名。 以下是使用javap命令的基本步骤: 首先,你需要有一个已编译的.class文件 打开命令行界面 使用javap命令并指定类的完全限定名(包括包名) 例
阅读全文
摘要:1、JNI原理概述 通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链产物,然后暴露其实现类的构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法。进一步地,为了让不同库之
阅读全文
摘要:1、下表描述了Java基本类型在C++中对应的本地类型: Java TypeNative TypeDescription boolean jboolean unsigned 8 bits byte jbyte signed 8 bits char jchar unsigned 16 bits sho
阅读全文

浙公网安备 33010602011771号