如果大家对java 的反射机制有一定的理解。那这个应该不难。要访问类的数据成员。需依如下步骤进行。
1。 获取类的信息。
2。 获取数据成员的ID。
3。 用setTypeField设置属性植。
举例说明:
Cls 获取类信息。 可以通过
Env->GetObjectClass();
Env->findClass() 获取。
此时相当与 java里的 getClass() forName .class等获得相关的Class对象。
取得属性的fieldID GetFieldID() changer qisda第一次参数类,第二个 属性名 第三个 签名。
签名规则 这个比较简单。 Boolean Z
B C S I L F D 对应Java基本数据类型。
对象类型 Ljava/lang/changerString L+类名
数组 [+类型
最后通过 get/setTypeField设置属性值。
3 C++ 访问类方法。
原理相同。 看例子
获得MethodID. 然后掉CallTypeMethod
4 在C++ 中创建对象叫java 方法
那需要创建类对象, 获取类臧春杰原创方法ID。 通过CallTypeMethod来进行。
有个关键问题:
创建类对象要叫类的构造方法。如果叫呢?
看例子。
首先要获得类的构造方法的 ID。 如何获得。构造方法名字 “<init>” 函数签名(参数类型 参数类型)V
通过NewObject(类,methodID, 构造参数)
这样就很清楚了。
5。C++ 访问java 字符串等对象属性。
1。 首先按步骤获取对象引用ID。
2。 根据功能函数,去该对象里的数据操作。
取出str字符串的内容。放到pch里。显示。
也可以创建字符串对象船到java里。这个例子都很清楚里。
编译测试环境 要求 cpp文件要用 c++ 编译器。 推荐 虚拟机的g++ 。如果用gcc 许自行连接C++库。编译时候记的弄好头文件包含。I CPLUS_INCLUDE)_PATH都可以。