`
ouyangfeng521
  • 浏览: 242903 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JNI 动态注册

 
阅读更多

由于静态注册要用javah生成头谁的,所以一般采用动态注册

 

代码如下

 

#include <jni.h>

#ifndef HELL_JNI
#define HELL_JNI


static const char *className = "com/braver/jni/dy/HelloJni";
#ifdef __cplusplus

extern "C" {
	JNIEXPORT jstring JNICALL hello(JNIEnv *, jobject);
#endif

#ifdef __cplusplus
}/*extern "C" {*/
#endif

#endif

 

#include "Hello_JNI.h"


//绑定函数指针
static JNINativeMethod gMethods[] = {
	{"hello","()Ljava/lang/String;" , (void *)hello}
};

JNIEXPORT jstring JNICALL hello(JNIEnv *env, jobject object)
{
	return (*env).NewStringUTF("hello");
}

//当在java层调System.loadLibrary("DyJNI");时会调用
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
	JNIEnv *env;
	//得到env
	if(vm->GetEnv((void**)&env , JNI_VERSION_1_4) != JNI_OK)
	{
		return JNI_ERR;
	}
	jclass claz;
	claz = env->FindClass(className);//查找类
	env->RegisterNatives(claz,gMethods,sizeof(gMethods) /sizeof(gMethods[0])); //注册
	return JNI_VERSION_1_4;
}

 

/**
 * @(#) HelloJni.java Created on 2012-10-10
 *
 * Copyright (c) 2012 Aspire. All Rights Reserved
 */
package com.braver.jni.dy;

/**
 * The class <code>HelloJni</code>
 *
 * @author ouyangfeng
 * @version 1.0
 */
public class HelloJni {

    static{
        String path = System.getProperty("user.dir");
        System.setProperty("java.library.path", path);
        System.loadLibrary("DyJNI");
    }
    public native String hello();
    
}
 /**
 * @(#) MainTest.java Created on 2012-10-10
 *
 * Copyright (c) 2012 Aspire. All Rights Reserved
 */
package com.braver.jni.test;

import com.braver.jni.dy.HelloJni;

/**
 * The class <code>MainTest</code>
 *
 * @author ouyangfeng
 * @version 1.0
 */
public class MainTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        final String str = new HelloJni().hello();
        System.out.println(str);

    }

}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics