jni调用汇总(java传各种类型的数据给c)
来源:互联网 发布:mac常用快捷键一览 编辑:程序博客网 时间:2024/06/06 01:27
1、方法的调用
假设java有这么一个方法
private static native void openFile();
那么生成相应的jni方法为
void Java_com_churnlabs_ffmpegsample_MainActivity_openFile(JNIEnv * env, jobject this)
问题1:什么是JNIEnv
找到android-ndk-r7b\platforms\android-8\arch-arm\usr\include下的jni.h文件
找到JNIEnv 是一个typedef const struct JNINativeInterface* JNIEnv;; 的结构体,接下来调用JNIEnv里面的方法
jstring (*NewStringUTF)(JNIEnv*, const char*);
调用上面的方法:
return (*(* env)).NewStringUTF(env,"hello world result");
一般大家不用上面这种方式,而是 (*env)-> NewStringUTF -> 表示 先获取到 *env 里面的内容(即*(xxx)) 让后点里面的方法。
2.c中的string 相连
//在c语言中 是没有java的String
char* cstr = Jstring2CStr(env, jstr);
LOGD("cstr=%s",cstr);
// c语言中的字符串 都是以'/0' 作为结尾
char arr[7]= {' ','h','e','l','l','o','\0'};
strcat(cstr,arr);
LOGD("new cstr=%s",cstr);
return (*env)->NewStringUTF(env,cstr);
3、java传int 数组给c
JNIEXPORT jintArray JNICALL Java_cn_itcast_ndk3_DataProvider_intMethod
(JNIEnv * env , jobject obj , jintArray arr){
//1.知道数组的长度
//2.操作这个数组里面的每一个元素
int len = (*env)->GetArrayLength(env,arr);
LOGD("shuzu len =%d",len);
jint* intarr = (*env)->GetIntArrayElements(env,arr,1);
int i =0; //c99
for(;i<len;i++){
//*(intarr+i) += 10;
intarr[i]+= 10;
}
return arr;
(*env)->ReleaseIntArrayElements(env,arr,intarr,0); // c语言释放掉 刚才申请的内存空间
4、char 对应c中的string
5、静态方法的调用
public static native int sub(int x ,int y);
JNIEXPORT jint JNICALL Java_cn_itcast_ndk3_DataProvider_sub
(JNIEnv * env, jclass clazz, jint x, jint y){
。。。。
}
总结:
*env java 虚拟机 结构体c实现的指针 包含的有很多jni方法
jobject obj 代表的是调用这个c代码的java对象。
4、
- jni调用汇总(java传各种类型的数据给c)
- java的各种类型转换汇总
- Java的JNI:使用Java调用C程序(入门)
- Java的JNI:使用Java调用C程序(一)
- 【Java】Java调用C/C++程序的实现(jni)
- Java调用C JNI
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- JAVA JNI调用C编写的dll
- Java调用C++: JNI的使用入门
- jni的使用(java调用c++)
- jni C调用java的实例
- JNI JAVA与C的互相调用
- jni传递数据给java
- 关于 android 的JNI的java 调用 C和 C 调用JAVA(1)
- 关于 android 的JNI的java 调用 C和 C 调用JAVA(2)
- 各种平台下jni调用C/C++
- java基础学习笔记(五) 文字的编码方案
- IPA
- 导入Excel遇到数字字母混合列,字母导入为空值发生数据丢失时,用以下方法解决!
- android in practice_Communicating with a Service (portfolio project)
- windows 命令方式查找指定IP的MAC地址
- jni调用汇总(java传各种类型的数据给c)
- thin
- JBoss Tattletale 简介
- mysql安装图解 mysql图文安装教程(详细说明)
- C语言中宽字符和多字节字符
- java线程
- 基于visual c++之windows核心编程代码分析 远程代码注入执行
- Oracle DBLink 建立
- 为什么全球最好的大学大半在美国?看看美国的孩子是怎么念书的 ~~