C++与java混合编写和C++与OC混合编写 笔记
16lz
2021-01-25
1、Java与C++混合编写:
使用JNI(Java本地调用)
实例:cocos2dx/platform/android/jni对应目录cocos2dx/platform/android/java
constchar*getConstStrRetuen(constchar*funcName){JniMethodInfot;std::stringret;if(JniHelper::getStaticMethodInfo(t,"org/cocos2dx/lib/Cocos2dxHelper",funcName,"()Ljava/lang/String;")){jstringretFromJava=(jstring)t.env->CallStaticObjectMethod(t.classID,t.methodID);constchar*str=t.env->GetStringUTFChars(retFromJava,0);ret=str;t.env->ReleaseStringUTFChars(retFromJava,str);t.env->DeleteLocalRef(t.classID);}returnret.c_str();}constchar*getDEVICENAME(){returngetConstStrRetuen("getDeviceName");}
如上,调用JniHelper::getStaticMethodInfo(JniMethodInfo&,java代码文件,方法名,参数返回值定义)
在org/cocos2dx/lib/Cocos2dxHelper.java文件存在一个方法
publicstaticStringgetDeviceName(){try{Stringmanufacturer=Build.MANUFACTURER;Stringmodel=Build.MODEL;if(model.startsWith(manufacturer)){returncapitalize(model);}else{returncapitalize(manufacturer)+""+model;}}catch(Exceptione){return"";}}
返回值是String
JNI的参数返回值格式:“(参数)返回值”
类型如下表:
C++类型 | Java类型 | 描述符 |
bool | boolean | Z |
byte | byte | B |
char | char | C |
short | short | S |
int | int | I |
long | long | J |
float | float | F |
double | double | D |
string | Ljava/lang/String; | Lfully-qualified-class; |
[] | [] | [ type |
后两种是泛用类型,Java自定义类型和数组
举例:C++函数描述:longf(intn,Strings,int[]arr);JNI描述为:(ILjava/lang/String;[I)J
函数JniHelper::getStaticMethodInfo以及JniHelper::getMethodInfo在cocos2dx\platform\android\jni\JniHelper.cpp文件中有实现。
2、OC与C++混合编写:
OC是概念的C语言,目前GCC和Clang都支持OC与C++混合编译,OC的文件后缀名称是.mm。可以在C++的.h文件创建类以及方法的声明,在对应.mm文件实现类和声明的方法。
例如,在CCDevice.h文件定义了staticconstchar*getDeviceName();实现如下:
constchar*CCDevice::getDeviceName(){NSString*strName=[[UIDevicecurrentDevice]name];return[strNameUTF8String];}
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)studio插件大全
- android BannerView实现自动轮播广告的用法(参考自github)
- Android(安卓)签名和发布
- Andorid中xml资料汇总
- Android调用系统内部的下载程序下载文件(二)