JNI 生成C++接口方法.

来源:互联网 发布:aframe.js obj 编辑:程序博客网 时间:2024/06/05 05:12

步聚如下:

1.定义包名,写java类,添加native方法;

2.编译有native方法的java类,生成class文件;

3.javah生成native方法所对应.h,有助编写c实现;

注意:经常会出现类找不到等问题,总结如下用法:

            进入java工程\bin目录,进行命令:javah -classpath classes com.xxx.xxx.ClassName [回车]

            在bin目录下生成###.h文件

4.利用.h生成如下cpp;

 
 

#include <jni.h>extern "C" void start(JNIEnv *env, jobject thiz, jstring s, jint i){}extern "C" void stop(JNIEnv *env, jobject thiz){}#define JNIREG_CLASS "com/qijie/jni/JniFunc"//指定注册类/** * Table of methods associated with a single class. */static JNINativeMethod gMethods[] = { { "start", "(Ljava/lang/String;I)V",(void*)start}, //注意参数描述V后面没有“;”{ "stop", "()V",(void*)stop }, };/* * Register several native methods for one class. */static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods, int numMethods) {jclass clazz;clazz = env->FindClass(className);if (clazz == NULL) {return JNI_FALSE;}if (env->RegisterNatives(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;}/* * 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((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;}

原创粉丝点击