您的位置:首页 > 移动开发 > Android开发

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

2015-09-16 10:48 936 查看
1. 接下来我们细讲分析一下前面一讲中,c功能实现的代码:

(1)hello.c :

 #include <jni.h>

char* getHello()
{
////////
return "hello Android From C";
}

//jni协议给java调用
//  返回类型   方法名(Java_包名(使用"_"把包名分割)_类名_方法名  (参数)

//JNIEnv* env   jni的结构体数据,jni系统实现 ;   obj java对象  调用该jni方法的对象
jstring Java_com_himi_helloworld_MainActivity_getHelloFromC(JNIEnv* env, jobject obj)
{
char* res = getHello();//获取到C代码字符串结果
/**
* (**env).GetVersion(env);
* (*env)->GetVerison(env);
*/
//jstring (*NewStringUTF)(JNIEnv*, const chat*);
jstring jres = (**env).NewStringUTF(env,res);

return jres;
}


• 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结构体的成员[b]NewStringUTF(只不过这里的[b]NewStringUTF是一个函数指针)[/b]。[/b]

(**env).NewStringUTF(JNIEnv*, const char*);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: