Android(java)学习笔记202:JNI之hello.c(c代码功能实现)指针语法解析
2024-08-23 13:38:00
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结构体的成员NewStringUTF(只不过这里的NewStringUTF是一个函数指针)。
(**env).NewStringUTF(JNIEnv*, const char*);
最新文章
- oracle如何清空一个用户下的所有表中的数据?
- Python: Lambda Functions
- hdoj 5349 MZL&#39;s simple problem
- header页头内容整理
- 基于Networks of Brokers的HA方案
- 一个想法(续六):IT联盟创业计划:如何进行找钱、寻人、做事?
- 【原】Java学习笔记026 - 集合
- 学习笔记3-开发与运行(卸载)第一个ANDROID应用
- iOS中关于UIApplication的详细介绍
- ImCash:第一个集多功能于一身的数字资产平台
- mvc 之 学习地址
- 测试工具之Jmeter(各部件简单介绍)
- SVM笔记
- ValueError: total size of new array must be unchanged
- ext2文件系统学习(二)—— 目录磁盘结构
- 20145208 蔡野 《网络对抗》Exp6 信息搜集与漏洞扫描
- OpenGL ES 2 for Android - A Quick Start Guide
- The Seven Percent Solution
- 从零开始学习html(十)CSS格式化排版——上
- Java-JUC(五):闭锁(CountDownLatch)
热门文章
- YTU 2979: MathBook类--多态
- 为ios app添加广告条
- I.MX6 Android stlport 使用
- c#网格控件,Excel控件
- Vue.js:安装node js到构建一个vue并启动它
- 【196】Dell 移动工作站系统安装方法
- asp.net Identity2 角色(Role)的使用(一)初始配置
- bzoj 4320: ShangHai2006 Homework【分块】
- 洛谷 P3622 [APIO2007]动物园【状压dp】
- 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。