JNI调用c基本用法
来源:互联网 发布:陕西软件考试网 编辑:程序博客网 时间:2024/05/21 22:43
// 静态方法 jclass
JNIEXPORT jstring JNICALL Java_JniMain_getStringFromC
(JNIEnv * env, jclass jclz) {
return (*env)->NewStringUTF(env, "C string");
}
// 非静态方法 jobject
JNIEXPORT jstring JNICALL Java_JniMain_getStringFromC2
(JNIEnv * env, jobject jobj) {
return (*env)->NewStringUTF(env, "C string2");
}
//访问非静态域
JNIEXPORT jstring JNICALL Java_JniMain_accessField
(JNIEnv * env, jobject jobj) {
// jclass
jclass jclz = (*env)->GetObjectClass(env, jobj);
// fieldId 属性名称,属性签名
jfieldID fid = (*env)->GetFieldID(env, jclz, "key", "Ljava/lang/String;");
// key -> dongNao key
// 得到key 对应的值
// GetXXXField
jstring jstr = (*env)->GetObjectField(env, jobj, fid);
// jni -> c
char * c_str = (*env)->GetStringUTFChars(env, jstr, NULL);
char text[30] = "test";
// 生成新的字符串 dongNao key
strcat(text, c_str);
// C -> jni
jstring new_str = (*env)->NewStringUTF(env, text);
//setXXXField
(*env)->SetObjectField(env, jobj, fid, new_str);
(*env)->ReleaseStringChars(env, new_str, c_str);
return new_str;
}
JNIEXPORT void JNICALL Java_JniMain_accessStaticField
(JNIEnv *env, jobject jobj) {
// jclass
jclass jclz = (*env)->GetObjectClass(env, jobj);
// fieldId 属性名称,属性签名
jfieldID fid = (*env)->GetStaticFieldID(env, jclz, "count", "I");
if (fid == NULL)
{
printf("fid is null");
}
jint count = (*env)->GetStaticIntField(env, jclz, fid);
count++;
(*env)->SetStaticIntField(env, jclz, fid, count);
}
JNIEXPORT jstring JNICALL Java_JniMain_getStringFromC
(JNIEnv * env, jclass jclz) {
return (*env)->NewStringUTF(env, "C string");
}
// 非静态方法 jobject
JNIEXPORT jstring JNICALL Java_JniMain_getStringFromC2
(JNIEnv * env, jobject jobj) {
return (*env)->NewStringUTF(env, "C string2");
}
//访问非静态域
JNIEXPORT jstring JNICALL Java_JniMain_accessField
(JNIEnv * env, jobject jobj) {
// jclass
jclass jclz = (*env)->GetObjectClass(env, jobj);
// fieldId 属性名称,属性签名
jfieldID fid = (*env)->GetFieldID(env, jclz, "key", "Ljava/lang/String;");
// key -> dongNao key
// 得到key 对应的值
// GetXXXField
jstring jstr = (*env)->GetObjectField(env, jobj, fid);
// jni -> c
char * c_str = (*env)->GetStringUTFChars(env, jstr, NULL);
char text[30] = "test";
// 生成新的字符串 dongNao key
strcat(text, c_str);
// C -> jni
jstring new_str = (*env)->NewStringUTF(env, text);
//setXXXField
(*env)->SetObjectField(env, jobj, fid, new_str);
(*env)->ReleaseStringChars(env, new_str, c_str);
return new_str;
}
JNIEXPORT void JNICALL Java_JniMain_accessStaticField
(JNIEnv *env, jobject jobj) {
// jclass
jclass jclz = (*env)->GetObjectClass(env, jobj);
// fieldId 属性名称,属性签名
jfieldID fid = (*env)->GetStaticFieldID(env, jclz, "count", "I");
if (fid == NULL)
{
printf("fid is null");
}
jint count = (*env)->GetStaticIntField(env, jclz, fid);
count++;
(*env)->SetStaticIntField(env, jclz, fid, count);
}
阅读全文
0 0
- JNI调用c基本用法
- 基本JNI调用技术(c/c 与java互调
- 基本JNI调用技术(c/c 与java互调
- 基本JNI调用技术(c/c 与java互调
- 基本JNI调用技术(c/c 与java互调)
- 基本JNI调用技术(c/c 与java互调
- 基本JNI调用技术(c/c++与java互调)
- 基本JNI调用技术(c/c++与java互调)
- Chap15:基本JNI调用技术(c/c++与java互调)
- 基本JNI调用技术(c/c++与java互调)
- 基本JNI调用技术(c/c++与java互调)
- 【转】基本JNI调用技术(c/c++与java互调)
- JNI 调用C/C++
- Java调用C JNI
- JNI调用C方法
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- Java四大特征(抽象、封装、继承、多态)
- 安卓实现按返回键回到桌面以及再一次按返回键退出应用
- 高数基础4-导数与微分
- 深刻理解引用、const引用、右值引用的本质
- 调整数组顺序使奇数位于偶数前面
- JNI调用c基本用法
- CodeForces 731C C
- node+express+http-proxy-middleware代理转发
- 实习项目二总结
- Python中list,tuple,dict,set的区别和用法
- 日期帮助类
- JavaScript(5)__Js基础<函数>
- OncePerRequestFilter dispatcherType
- win7文件共享设置