zoukankan      html  css  js  c++  java
  • C和C++函数时的JNI使用区别

    Java调用C和C++函数时的JNI使用区别:
    注意:jni.h头文件中对于***.c  &  ***.cpp采用不同的定义

    在C的定义中,env是一个两级指针,而在C++的定义中,env是个一级指针
    C形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数

    jclass (JNICALL *GetObjectClass)   (JNIEnv *env, jobject obj);
    jclass GetObjectClass(jobject obj)
    {
        return functions->GetObjectClass(this,obj);
    }


    对于***.c
    1.jclass test_class = (*env)->GetObjectClass(env, obj);
    2.jfieldID id_num = (*env)->GetFieldID(env, test_class, "num", "I");

    对于 ***.cpp
    1.jclass test_class = env->GetObjectClass(obj);
    2.jfieldID id_num = env->GetFieldID(test_class, "num", "I");

    在 C 中,
    JNI 函数调用由“(*env)->”作前缀,目的是为了取出函数指针所引用的值。
    在 C++ 中,
    JNIEnv 类拥有处理函数指针查找的内联成员函数。

    下面将说明这个细微的差异,其中,这两行代码访问同一函数,但每种语言都有各自的语法。
    C 语法:jsize len = (*env)->GetArrayLength(env,array);
    C++ 语法:jsize len =env->GetArrayLength(array);

  • 相关阅读:
    如何让spring mvc web应用启动时就执行特定处理
    关联查询left join中on 和where 的区别
    c语言中'.'与'>'的区别
    申请博客园的计划
    java学习环境安装与配置
    ACM之旅之坎坷编译器
    2013年小结
    申请博客园的计划
    生命在于运动
    委托和事件
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2825496.html
Copyright © 2011-2022 走看看