JNI 开发笔记 - 示例代码
2016-04-10 17:41
435 查看
SampleCode
#include <jni.h> #include <stdio.h> #include <errno.h> //com/ex/Foo.java /* Native function */ JNIEXPRORT jboolean JNICALL Java_com_ex_Foo_fooFunc(JNIEnv *env, jobject obj, jint k) { if (k > 0) return JNI_TRUE; else return JNI_FALSE; } /* native code call java method */ JNIEXPRORT jboolean JNICALL Java_com_ex_Foo_callJavaFunc(JNIEnv *env, jobject obj, jint k) { jboolean r = JNI_FALSE; jclass clazz = (*env)->GetObjectClass(env, obj); if (clazz == NULL) return r; jmethodID mID = (*env)->GetMethodID(env, clazz, "sayHello", "(I)Z"); if (mID == NULL) return r; r = (*env)->CallBooleanMethod(env, obj, mID, 1); if (ExceptionCheck(env) == JNI_TRUE) return JNI_FALSE; else return r; } /**/ void fooPrintString(JNIEnv *env, jobject obj, jstring str) { jchar *jstr = (*env)->GetStringUTFChars(env, str, 0); if (jstr == NULL) return NULL; printf("String from java:%s", jstr); (*env)->ReleaseStringUTFChars(env, str, jstr); } jint fooGetByteArray(JNIEnv *env, jclass clazz, jbyteArray array) { jint len = (*env)->GetArrayLength(env, array); if (len < strlen("Hello Jni") + 1) return -1; jbyte *buf = (*env)->GetByteArrayElements(env, array, 0); if (buf == NULL) return -ENOMEM; jint r = sprintf(buf, "Hello Jni"); (*env)->ReleaseByteArrayElements(env, array, buf, 0); return r; } static JNINativeMethod methods[] = { {"fooPrintString", "(Ljava/lang/String;)", (void *)fooPrintString}, {"fooGetByteArray", "([B)I", (void *)fooGetByteArray}, }; jint JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_4) != JNI_OK) return JNI_ERR; jclass clazz = (*env)->FindClass(env, "com/ex/Foo"); if (clazz == NULL) return JNI_ERR; jint len = sizeof(methods) / sizeof(methods[0]); (*env)->RegisterNatives(env, clazz, methods, len); return JNI_VERSION_1_4; }
相关文章推荐
- SpringMVC教程(一)框架搭建
- 解决springMVC POST 中文乱码
- 严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.InvocationTargetE
- JNI 开发笔记 - Native代码开发以及核心API介绍
- [疯狂Java]SQL:子查询
- Spring各jar包的作用
- 图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目
- 小代码 栈的简单实现
- 日期
- ASP.NET MVC4入门教程(七):给电影表和模型添加新字段
- C语言中整型与指针之间转换的注意点
- 学习vb的心得体会
- java递归算法总结
- Arcgis engine编程报错查询
- python的Image和skimage处理图片
- 队列
- 对vb感受(下)
- 数列回顾
- 在配置spring配置文件时报错,解决办法
- PHP基础(PHP的数据类型)