JNI开发之访问java的实例

来源:互联网 发布:数据库同步工具 编辑:程序博客网 时间:2024/05/16 08:47

前言:前几章讲述了如何访问Java的属性和属性方法,今天看一下如何访问java的实例。

----------分割线-----------

java代码:

package com.fly;import java.util.Random;public class TestJni {String name;int age;public TestJni(String name, int age) {super();this.name = name;this.age = age;}public native static TestJni newObjfromJni();public static void main(String[] args) {TestJni newObjfromJni = newObjfromJni();        System.out.println(newObjfromJni());    }    public String toString() {        return "FLY [name=" + name + ", age=" + age + "]";    }// 加载动态库static {System.loadLibrary("JNI");}}

C代码:
#include"com_fly_TestJni.h" JNIEXPORT jobject JNICALL Java_com_fly_TestJni_newObjfromJni(JNIEnv *env, jclass jcs){//函数原型jclass(JNICALL *FindClass)(JNIEnv *env, const char *name);//得到指定的class//第一个参数//第二个参数  要获取class 的包名/类名jclass fmy_class = (*env)->FindClass(env, "com/fly/TestJni");//函数原型    jmethodID (JNICALL *GetMethodID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);//第一个参数 //第二个参数 对应的 所在类名class//第三个参数 方法名 构造方法固定为<init>//第四个参数 签名jmethodID method_id = (*env)->GetMethodID(env, fmy_class, "<init>", "(Ljava/lang/String;I)V");jstring name = (*env)->NewStringUTF(env, "XiaoMing");jint age = 12l;//函数原型:    jobject (JNICALL *NewObject)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);//第一个参数//第二个参数 对应类class//第三个参数 方法id//第四个参数 可变参数 传入构造方法使用return  (*env)->NewObject(env, fmy_class, method_id, name, age);}
运行:

----------完---------

阅读全文
0 0
原创粉丝点击