使用JNI_OnLoad()函数实现本地方法的注册
来源:互联网 发布:单片机怎么连接电脑 编辑:程序博客网 时间:2024/06/06 02:40
实现JNI中本地函数注册可以两种方式:
(1)采用默认的本地函数注册流程。
(2)自己重写JNI_OnLoad()函数。(本文介绍)(Android中采用这种)
Java端代码:
package com.jni;public class JavaHello {public static native String hello();static {// load library: libtest.sotry {System.loadLibrary("test");} catch (UnsatisfiedLinkError ule) {System.err.println("WARNING: Could not load library!");}}public static void main(String[] args) {String s = new JavaHello().hello();System.out.println(s);}}
本地C语言代码:
#include <stdlib.h>#include <string.h>#include <stdio.h>#include <jni.h>#include <assert.h>JNIEXPORT jstring JNICALL native_hello(JNIEnv *env, jclass clazz){printf("hello in c native code./n");return (*env)->NewStringUTF(env, "hello world returned.");}#define JNIREG_CLASS "com/jni/JavaHello"//指定要注册的类/*** Table of methods associated with a single class.*/static JNINativeMethod gMethods[] = {{ "hello", "()Ljava/lang/String;", (void*)native_hello },//绑定};/** Register several native methods for one class.*/static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods){jclass clazz;clazz = (*env)->FindClass(env, className);if (clazz == NULL) {return JNI_FALSE;}if ((*env)->RegisterNatives(env, clazz, gMethods, numMethods) < 0) {return JNI_FALSE;}return JNI_TRUE;}/** Register native methods for all classes we know about.*/static int registerNatives(JNIEnv* env){if (!registerNativeMethods(env, JNIREG_CLASS, gMethods, sizeof(gMethods) / sizeof(gMethods[0])))return JNI_FALSE;return JNI_TRUE;}/** Set some test stuff up.** Returns the JNI version on success, -1 on failure.*/JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){JNIEnv* env = NULL;jint result = -1;if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {return -1;}assert(env != NULL);if (!registerNatives(env)) {//注册return -1;}/* success -- return valid version number */result = JNI_VERSION_1_4;return result;}
转自:http://blog.csdn.net/zhenyongyuan123/article/details/5862054
0 0
- 使用JNI_OnLoad()函数实现本地方法的注册
- JNI_OnLoad ()注册函数使用方法
- JNI_onLoad 动态注册函数
- JNI_Onload的实现
- JNI_Onload的使用
- JNI_OnLoad实现动态函数替换
- Android JNI 动态注册方法(JNI_OnLoad)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android jni调用,实现自己的JNI_OnLoad函数
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI技术 实现自己的JNI_OnLoad函数案列
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- Android JNI(实现自己的JNI_OnLoad函数)
- org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type sette
- 关于Revit 二次开发问题请咨询Autodesk ADN
- 10个不错的编程等宽字体
- mysql 时间函数大全
- 冒泡算法编码
- 使用JNI_OnLoad()函数实现本地方法的注册
- 内核对象(VC_Win32)
- SQL 语句大全
- 数据的标准化
- SQL SERVER 正则匹配实例分享--【叶子】
- Android:处理调用系统相机照片被压缩问题
- PC值=当前程序执行位置+8
- vs2010无法连接到asp.net developer server
- 小团队git开发模式