Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1136167
  • 博文数量: 276
  • 博客积分: 8317
  • 博客等级: 少将
  • 技术积分: 2329
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-12 08:17
个人简介

http://ads.buzzcity.net/adpage.php?partnerid=40096

文章分类

全部博文(276)

文章存档

2013年(1)

2012年(38)

2011年(102)

2010年(85)

2009年(45)

2008年(5)

分类: LINUX

2009-09-18 09:22:02

官方发布目前只有C版,现提供C++版,代码如下

#include <stdio.h>
#include <jni.h>
//#define LOG_TAG "HelloJni"

//#undef LOG

//#include


JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv * env, jobject obj)
{
    return env->NewStringUTF( (char *)"HelloJni Native String");
    //LOGD("Hello LIB!\n");


}

static JNINativeMethod methods[] = {
        {"stringFromJNI", "()Ljava/lang/String;", (void*)Java_com_example_hellojni_HelloJni_stringFromJNI },
};

static const char *classPathName = "com/example/hellojni/HelloJni";

/*
 * Register several native methods for one class.
 */

static int registerNativeMethods(JNIEnv* env, const char* className,
                JNINativeMethod* gMethods, int numMethods)
{
    jclass clazz;
    fprintf(stderr, "RegisterNatives start for '%s'", className);
    clazz = env->FindClass(className);
    if (clazz == NULL) {
        fprintf(stderr, "Native registration unable to find class '%s'", className);
        return JNI_FALSE;
    }
    if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
        fprintf(stderr, "RegisterNatives failed for '%s'", className);
        return JNI_FALSE;
    }

    return JNI_TRUE;
}

/*
 * Register native methods for all classes we know about.
 *
 * returns JNI_TRUE on success.
 */

static int registerNatives(JNIEnv* env)
{
    if (!registerNativeMethods(env, classPathName,
        methods, sizeof(methods) / sizeof(methods[0]))) {
            return JNI_FALSE;
    }

    return JNI_TRUE;
}


// ----------------------------------------------------------------------------


/*
 * This is called by the VM when the shared library is first loaded.
 */

 
typedef union {
    JNIEnv* env;
    void* venv;
} UnionJNIEnvToVoid;

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    UnionJNIEnvToVoid uenv;
    uenv.venv = NULL;
    jint result = -1;
    JNIEnv* env = NULL;

    printf("JNI_OnLoad");

    if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
        fprintf(stderr, "GetEnv failed");
        goto bail;
    }

    env = uenv.env;

    if (registerNatives(env) != JNI_TRUE) {
        fprintf(stderr, "GetEnv failed");
        goto bail;
}

        result = JNI_VERSION_1_4;
bail:
    return result;
}

阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~