java与C函数相互调用整理
来源:互联网 发布:win10网络图标灰色的 编辑:程序博客网 时间:2024/04/29 23:18
java 调用C
一般不调用C++
先定义一个Java类,
然后声明一个方法,添加关键字native表示是在C++中实现的
然后再C++中声明一个函数,函数需要有extern “C”声明,不然无法通过函数名找到入口
c++的函数对命名:必须是Java_包名(名称中所有“.”都替换成“_")_函数在Java中声明的文件名(也是类名)_java中的函数名
C++函数的参数:JNIEnv* env, jobject thiz,这两个是必须的参数,放在最前面,其他参数根据要跟java的声明保持一致
一下是类型对应表:
Java类型 本地类型 JNI中定义的别名 intlongjintlong_int64jlongbytesigned charjbytebooleanunsigned charjbooleancharunsigned shortjcharshortshortjshortfloatfloatjfloatdoubledoublejdoubleObject_jobject*jobjectStringjobjectjstringjstring的使用需要做一些处理之后才能使用
JniHelper提供了相应的方法
static std::string jstring2string(jstring str);
static const char* jstring2pStr(jstring str);
实际的调用方式就是在java中调用java中的函数声明即可
c++调用Java:
一般是调用静态方法
具体代码如下:
JniMethodInfo t;//声明一个方法描述
if( JniHelper::getStaticMethodInfo(t, "com/game/jni", "callFun", "(ZZ)V") )
//第二个参数是方法所在的java目录,也就是java文件的包名/文件名,中间所有的"."换成"/"
//第三个参数是方法名
//第四个参数是(参数类型...)返回类型
//参数以及返回类型声明如下
Java类型 对应的签名booleanZbyteBcharCshrotSintIlongLfloatFdoubleDvoidVObjectL用/分割包的完整类名; Ljava/lang/String;Array[签名 [I [Ljava/lang/String;{
t.env->CallStaticVoidMethod( t.classID, t.methodID, isLandScape, isFixed );
//这个函数用来调用java静态方法,前两个参数是固定的,其他参数直接传入即可,但是如果使用了字符串之类的,需要转换为jstring之后再做参数传入
//带返回值的调用CallStaticObjectMethod,其他类型的调用可以参考jni .h的声明
/调用/t.env->NewStringUTF(”“)即可得到jstring对象,这种对象需要手动释放本地引用计数
//如下调用t.env->DeleteLocalRef
t.env->DeleteLocalRef( t.classID );
// t.classID 也是需要释放的对象
}
PS:需要注意的是,java要调用C++代码,必须先调用System.loadLibrary()加载相应的C++库。并且java只能调用已经加载过得库中的方法。如果在c++库运行时动态加载其他的c++库,这个另外加载的库中的函数是无法被java调用的
- java与C函数相互调用整理
- C与C++函数的相互调用
- C与C++相互调用函数,变量
- extern C实现C与C++函数的相互调用
- extern C(C++与C实现相互函数的调用)
- C/C++与汇编的函数相互调用分析
- C/C++与汇编的函数相互调用分析
- C/C++相互调用函数
- C/C++函数相互调用
- perl与c相互调用
- c 与 python相互调用
- C与C++相互调用
- c与python相互调用
- c与lua 相互调用
- lua与C相互调用
- java与C/C++之间通过jni相互调用
- Android 平台下Java与C/C++的相互调用
- C函数和C++函数相互调用
- Undefined symbols for architecture x86_64
- Apache Zookeeper入门
- HDU 5099 Comparison of Android versions
- Android NDK隐藏jni动态库的内部符号表
- 使用axis发布weblogic(一)
- java与C函数相互调用整理
- STM32 PWM总结
- VS watch(监视)的技巧
- 《道德经》和《圣经》中的“道”
- ViewPager 中子pager是WebView,WebView中有左右翻图片时,手势冲突
- iOS播放音乐文件时的操作和打断处理
- 太阳能路灯原理介绍
- 简明Vim操作手册
- 简单字符串比较