zoukankan      html  css  js  c++  java
  • 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*);

  • 相关阅读:
    第八章
    第十章
    第九章
    第七章
    第六章
    第五章
    第四章心得
    第二章心得
    第三章心得
    第一章心得
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4812554.html
Copyright © 2011-2022 走看看