码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-09-16 12:05:42      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

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*);

 

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

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4812554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!