------/
本地代码访问java代码
------/
obj为指针,若本地方法非静态,则指向与其相关联对象,若本地方法静态,则指向与其相关联类.class
jint (JNICALL *GetIntField)(JNIEnv *env, jobject obj, jfieldID fieldID);
jint (JNICALL *GetStaticIntField) (JNIEnv *env, jclass clazz, jfieldID fieldID);
class _jobject {};
class _jclass : public _jobject {}; //均直接或间接继承_jobject
……
typedef _jobject *jobject;
typedef _jclass *jclass; //均为指针类型
……
------/
Java类型在c/c++中映射关系
------/jclass的取得
GetObjectClass与java中对象.getClass()有相同功能,返回其对应字节码
------/访问java类中属性和方法
------/
------/
------/sign签名
------/
------/
------/
------/
K:\files\workspace\Test\src>javap -help
-p -private Show all classes and members
-s Print internal type signatures
Compiled from "Test.java"
public class Test {
public int property;
Signature: I
public Test();
Signature: ()V
public native void sayHello();
Signature: ()V
public int function(int, javax.xml.crypto.Data, int[]);
Signature: (ILjavax/xml/crypto/Data;[I)I
public static void main(java.lang.String[]);
Signature: ([Ljava/lang/String;)V
}
本地代码访问java代码
------/
obj为指针,若本地方法非静态,则指向与其相关联对象,若本地方法静态,则指向与其相关联类.class
jint (JNICALL *GetIntField)(JNIEnv *env, jobject obj, jfieldID fieldID);
jint (JNICALL *GetStaticIntField) (JNIEnv *env, jclass clazz, jfieldID fieldID);
class _jobject {};
class _jclass : public _jobject {}; //均直接或间接继承_jobject
……
typedef _jobject *jobject;
typedef _jclass *jclass; //均为指针类型
……
------/
Java类型在c/c++中映射关系
------/jclass的取得
GetObjectClass与java中对象.getClass()有相同功能,返回其对应字节码
------/访问java类中属性和方法
------/
------/
------/sign签名
------/
------/
------/
------/
K:\files\workspace\Test\src>javap -help
-p -private Show all classes and members
-s Print internal type signatures
public class Test{
public native void sayHello();
public int property;
public int function(int foo,Data data,int arr[]){
System.out.println("function");
return 0;
}
public static void main(String args[]){
}
}
K:\files\workspace\Test\bin>javap -s -p Test
//Test.class非Test.java
Compiled from "Test.java"
public class Test {
public int property;
Signature: I
public Test();
Signature: ()V
public native void sayHello();
Signature: ()V
public int function(int, javax.xml.crypto.Data, int[]);
Signature: (ILjavax/xml/crypto/Data;[I)I
public static void main(java.lang.String[]);
Signature: ([Ljava/lang/String;)V
}