首页 > 移动平台 > 详细

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

时间:2015-09-16 12:04:24      阅读:309      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!