• Android(java)学习笔记202:JNI之hello.c(c代码功能实现)指针语法解析


    1. 接下来我们细讲分析一下前面一讲中,c功能实现的代码:

    (1)hello.c :

     1 #include <jni.h>
     2 
     3 char* getHello()
     4 {
     5     ////////
     6     return "hello Android From C";
     7 }
     8 
     9 
    10 //jni协议给java调用
    11 //  返回类型   方法名(Java_包名(使用"_"把包名分割)_类名_方法名  (参数)
    12 
    13 //JNIEnv* env   jni的结构体数据,jni系统实现 ;   obj java对象  调用该jni方法的对象
    14 jstring Java_com_himi_helloworld_MainActivity_getHelloFromC(JNIEnv* env, jobject obj)
    15 {
    16     char* res = getHello();//获取到C代码字符串结果
    17     /**
    18      * (**env).GetVersion(env);
    19      * (*env)->GetVerison(env);
    20      */
    21     //jstring (*NewStringUTF)(JNIEnv*, const chat*);
    22     jstring jres = (**env).NewStringUTF(env,res);
    23 
    24     return jres;
    25 }

    • jstring :数据类型就是 void*(指向一个空区域,初始化的指针)

    jni.h文件下:

    typedef  void*      jobject;

    typedef  jobject    jclass;

    typedef  jobject    jstring;

    • JNIEnv* env

    JNINativeInterface  struct     :说明JNINativeInterface是个结构体

    typedef const  struct  JNINativeInterface*  JNIEnv;  :说明JNIEnv是个结构体指针(这个结构体就是JNINativeInterface)

    这个时候JNIEnv* env等价于:

    JNINativeInterface**  env; :也就是env定义为结构体指针的指针(双重指针)

    如果想利用env访问JNINativeInterface结构体的成员NewStringUTF(只不过这里的NewStringUTF是一个函数指针

    (**env).NewStringUTF(JNIEnv*, const char*);

  • 相关阅读:
    基于 MySQL 5.6 keepalived的双主搭建
    keepalived.conf 配置文件小结
    keepalived小结
    能不能利用复制报错,让从库停在同一个复制的位置上?
    复制介绍、复制的实用价值
    复制相关参数学习笔记--master上的参数
    计数排序
    双向链表
    约瑟夫问题
    单链表中重复元素的删除
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4812554.html
Copyright © 2020-2023  润新知