C++转JAVA的转换方法及约定

C++转JAVA的转换方法及约定

ID:37551432

大小:33.33 KB

页数:10页

时间:2019-05-25

C++转JAVA的转换方法及约定_第1页
C++转JAVA的转换方法及约定_第2页
C++转JAVA的转换方法及约定_第3页
C++转JAVA的转换方法及约定_第4页
C++转JAVA的转换方法及约定_第5页
资源描述:

《C++转JAVA的转换方法及约定》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.基本思想:1.1使对象对应每出现一个C++类就写一个JAVA类,JAVA类的行为完全模仿C++类的行为.而且要保证C++的对象的生存期至少比JAVA长,而且能够保证使所有动态分配出来的C++对象有机会得到析构。实现的方法是在每个JAVA类中添加一个int类型的变量ptr(参见表2.1中的part4),ptr指向该JAVA类所对应的C++对象。ptr并不在JAVA中使用,它只在本地方法中通过转换成相应的C++对象,来实现对C++调用(请参考表3.1示例)。1.2关于C++对象和JAVA对象的生存期问题的解决:对于C++对象的生成有两种情况1.2.1第一种情况,新的C++对

2、象在原C++系统内部管理,在JAVA中我们不关心它的创建和释放C++对象是由原系统(C++)内部生成,然后返回给外部调用最后再由原C++系统释放。在这种情况下,我们新建一个对应的JAVA类,然后把这个C++对象的地址赋给该JAVA类的内部成员变量ptr(通过带有参数(FromReturn,intexestPtr)的构造函数实现,其中FromReturn是一个空类用于标注不要创建C++对象,参见表2.1)。(按目前的分析,这种情况仅限于在原系统中返回值是C++指针的情况)1.2.2第二种情况,新的C++对象在外部创建是除第一种情况之外的(动态创建和静态创建都包括)其它所有情况

3、(1)若原C++类提供了构造函数,则在相应的JAVA类中效仿C++中的构造函数将它改造成JAVA格式。然后在此JAVA构造函数中调用Part3中的服务接口函数,该服务接口函数(JNI)在相应的本地方法中创建新的C++对象(并将它放进全局的对象管理类,见本条末)。在finallize的接口服务函数(JNI)的本地方法中释放这个C++对象,但是JAVA并不保证finallize一定执行,我们通过在JNI的本地实现中声明一个全局的对象管理类来解决,当新分配一个C++对象时我们把它放进这个管理类,当finallize执行时我们告诉这个管理类让它释放掉这个类。最后我们在这个管理类的析

4、构函数中释放掉所有未能被释放的C++对象。(该类参见表2.2CObjectManager类)(2)若原C++类提没有供了构造函数则我们在JAVA端提供一个空参数的构造函数(示例3.1中的JA),其余同(1)注:每个JAVA类都有4个部分Part1,Part2,Part3,Part41.3关于关于多态问题的解决:当C++中的函数返回类型为基类类型的指针而实际返回的是C++子类的对象时,相应的转到JAVA后也要返回的是JAVA基类类型但是要返回实际的JAVA子类对象,这时需要在C++端的基类中提供一个GetType函数在JAVA端根据不同的类型返回不同的JAVA子对象2.约定2

5、.1类名JAVA系统内类名与C++类的类名一致,方法格式一致2.2关于类的创建:参见1.22.3每个JAVA类都有四个部分.如表2.1所示。(此处以类JA为例)其中用到一个全局的类publicclassFromReturn(){}是一个空类,用在传给JAVA类的构造函数的参数,用于标注不要在构造函数中创建C++对象。这种情况适用于在原C++系统中返回一个类的情况。表2.1对JAVA类的约定对JAVA类的约定(以类JA为例),共分四个部分Parts1和Part2中的方法除JA(FromReturn,intexestPtr)这个构造函数外,其余的函数都要在Part3中的函数来实

6、现,即Par3为Part1和Part2提供服务,而Part3通过JNI调用本地方法publicclassJA{//Part1construct与finallize,必须提供=================================================protectedJA(FromReturn,intexestPtr){//所有的类必须提供这个构造方法,除了类名不一样外其余部分完ptr=existPtr;//全一样这个构造函数并不需要JNI,仅供内部使用,除这个构造函数外其isFromReturn=true;//它在本部分的方法都需要JNI,该方法内容十

7、分固定,所有类必须遵守}publicJA(){ptr=nJA();isFromReturn=false;}//publicsynchronizedfinalize(){if(!isFromReturn)nfinallize(ptr);}//Part2必须提供,与c++中暴露的方法一至,但要对应到JAVA格式========================publicSomeClassSomeMethod(){//有返回,对象类型intptrB;ptrB=nSomeMethod(ptr);SomeClassb=Som

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。