我想创建一个 DLL,它将一个 java 类对象作为参数。假设我创建了一些本机方法,这些方法将 Human.class 实例作为参数。为了访问人类对象,我该如何编写它的 C++ 实现?有可能吗?(请考虑,我根本没有使用 C++ 的经验。)我已经做了一些研究,因为看起来我需要从 C++ 访问指针。这让我有点困惑,因为此时我不明白 C++ 应该如何了解人类对象及其属性。例如JNI类public class FourthJNI { public static native int returnAgeOfHuman(Human abc); public static void main(String[] args) { Human testHuman = new Human("ABC", 23, "M"); /* Call to shared library */ int ageOfHuman = FourthJNI.returnAgeOfHuman(testHuman); System.out.println(testHuman.toString()); System.out.println("Age of Human: " + ageOfHuman); }}生成的头文件/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class FourthJNI */#ifndef _Included_FourthJNI#define _Included_FourthJNI#ifdef __cplusplusextern "C" {#endif/* * Class: FourthJNI * Method: returnAgeOfHuman * Signature: (LHuman;)I */JNIEXPORT jint JNICALL Java_FourthJNI_returnAgeOfHuman (JNIEnv *, jclass, jobject);#ifdef __cplusplus}#endif#endif我的 C++ 实现应该是什么样子的?
1 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
您必须在代码Java中解构类C++。您必须JNI逐个字段地使用方法和访问对象内部的数据。
基本上,您将不得不拨打以下形状的电话
/* Get int field
Take a look here, we are passing char* with
field descriptor - e.g. "I" => int
*/
jfieldID fidInt = (*env)->GetFieldID (env, cls, "iVal", "I");
jint iVal = (*env)->GetIntField (env, objarg, fidInt);
printf ("iVal: %d\n", iVal);
在这里给你完整的样本是没有意义的,把它放在这里会花费很多空间和时间。只需按照手册进行操作即可。
添加回答
举报
0/150
提交
取消