![]() |
1
7
问题是,一方面有面向对象的Java,另一方面有程序C。当加载Java类A时,JNI没有在C世界中创建某种对象(这是C -非C++),没有对象到对象映射。所以jni在C世界中加载相应的cpp文件 一旦 进入内存(这在C中是完全正常的行为)。编译器看到一堆函数和一个全局引用,不需要以某种方式创建多个实例。在加载Java类时,所有JNI编译器都是将C文件添加到要编译的文件列表中。 您想要的是Java对象和C对象之间的映射。这可以通过几种方式实现,我建议您阅读JNI中的代理模式。 很快解释一下,您有两种基本的方法来实现这一点。您可以在C端或Java端进行。当在C世界中存储关系时,您将在C中保持一个哈希表,其中C对象映射到Java对象。反过来说,在Java对象中有一个int对象,它实际上是指向内存中C对象的指针。然后,在C代码中,您将取消对该指针的引用(通过getIntfield())并转换为所需的C对象。 当然要加
对于Java类A,的确非常有效。Java有对象的概念,所以你可以从C世界中访问这些字符串。
环境是JNI环境。 |
![]() |
PPP · Kotlin JNI中Long类的名称是什么? 2 年前 |
![]() |
Gazouu · JNI使用。C中的hpp库++ 6 年前 |
![]() |
Alexzander Bond · JNI返回随机整数 6 年前 |