Re:许老师,如何在c语言中使用java传入的String?String类型对应的是jstring,如何使用呀?
上面的意思是java中有本地方法,如:
public native String sayHello(String
s);
对应编译后生成的.h头文件中应该是:
JNIEXPORT jstring JNICALL
Java_Test_sayHello(JNIEnv *, jobject,
jstring);
如何在c语言中使用java传入的字符串s,也就是说如何使用jstring类型。那么在c语言实现中如何使用传入的字符串s?
我们知道java中的String,c语言中应该对应的是char*类型,也就是说我们在jni的c语言实现中如何把jstring类型转换成为char*即可。
方法是这样的:
在c文件中声明char* str,然后
str= (char*)(*env)->GetStringUTFChars(env, jstring,
NULL);
这样就可以得到传入的字符串,过程如下:
JNIEXPORT jstring JNICALL
Java_Test_sayHello
(JNIEnv * env, jobject obj,
jstring s)
{
char * str;
str=(char*)(*env)->GetStringUTFChars(env,s,
NULL);
printf("%s",str);
(*env)->ReleaseStringUTFChars(env, s, str);
......
}
当然,java中有垃圾回收机制,二c语言没有,那么使用完该字符串之后该如何处理呢?字符串str使用完后,需要通知虚拟机平台相关代码无需再访问,方法是
(*env)->ReleaseStringUTFChars(env, jstring, str);
最后还要说一下,如果传入传出的字符串是中文,就又有问题了,我们需要手工进行uncode编码,否则就是乱码,当然如果程序设计合理,这里一般情况下尽量避免进行汉字的传递。
呵呵,就这样了!
分享到:
相关推荐
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息...... Chap 4:用javah产生一个.h文件......Chap5:jni教程(very very good)...3. 在native方法中使用用户定义的类... 157 4. 异常处理... 158
JNI处理String[]等特殊类型的数据,别处绝对中不到的
jni使用string相互调用 Java 传递 String 给C C 传递 jstring 给 Java
这个是经过验证的, JAVA层传入String参数, 在JNI里进行修改, 作为输出参数.
JNI开发Java调用C传递int、String、Array类型参数; 详情参考: int类型: (https://blog.csdn.net/niuba123456/article/details/80959892) String类型(https://blog.csdn.net/niuba123456/article/details/80977247);...
在windows环境下的jni.h jni_md.h文件。 实际上是从jdk1.8安装完毕后,从文件夹下取得的。 jni.h在【jdk1.8.0_144\include】路径下。 jni_md.h在【jdk1.8.0_144\include\win32】路径下(linux版把win32换成linux...
JNI处理hashmap,string等对象的操作,别处绝对没有的
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList<string>,ArrayList嵌套ArrayList<ArrayList<String>>等。
java 调用 dll 的方法,即JNI的使用,demo中有get()/set()方法,操作步骤详细,即使是没用过java的程序员按照步骤依然可以成功。
通过jni将一张彩色图片转换为黑白图片,通过这个demo,可以深入了解jni的应用
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单[归类].pdf
背景 最近公司要搭建大数据系统,架构师推荐使用flink来搭建这套系统。...自己按照教程一步敲了一遍,在集成环境中代码没有检查到错误,但是在运行时发现报错。最后找到GitHub上的源码copy运行了一遍依
赠送jar包:zstd-jni-1.3.8-1.jar; 赠送原API文档:zstd-jni-1.3.8-1-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
学习JNI编译时,缺少的jni.h和jni_md.h头文件,Java调用C和C++函数时的JNI使用区别: 注意:jni.h头文件中对于***.c & ***.cpp采用不同的定义
android jni 中文字符传递demo,实现了C语言与java端之间互相传递汉字的功能。例程开发环境为eclipse。详细说明,见相关博客。
本程序是在Eclipse中创建的一个Android Application,该项目中是在JNI中利用OpenGL ES库和OpenCV库进行一副图片的渲染。
jni简单使用 java通过JNI调用c++的简单配置步骤, Java 通过JNI调用c++ 1.java代码: //package com.gjl.testjni; class HelloWorld { static { System.loadLibrary("HelloWorld"); } private native void ...
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息......Chap 4:用javah产生一个...Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55