- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C转JAVA的转换方法及约定
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++对象在原 C++系统内部管理,在 JAVA
中我们不关心它的创建和释放
C++对象是由原系统(C++ )内部生成,然后返回给外部调用最后再由原C++系
统释放。在这种情况下,我们新建一个对应的JAVA 类,然后把这个C++对象的
地址赋给该JAVA 类的内部成员变量ptr (通过带有参数(FromReturn ,int exestPtr)
的构造函数实现,其中FromReturn 是一个空类用于标注不要创建C++对象,参
见表2.1 )。
(按目前的分析,这种情况仅限于在原系统中返回值是C++指针的情况)
1.2.2 第二种情况,新的 C++对象在外部创建
是除第一种情况之外的(动态创建和静态创建都包括)其它所有情况
(1)若原C++类提供了构造函数,则在相应的JAVA 类中效仿C++ 中的构造函
数将它改造成JAVA 格式。然后在此JAVA 构造函数中调用Part3 中的服务接
口函数,该服务接口函数(JNI )在相应的本地方法中创建新的C++对象(并将
它放进全局的对象管理类, 见本条末)。 在finallize 的接口服务函数(JNI )的本
地方法中释放这个C++对象,但是JAVA 并不保证finallize 一定执行,我们通过
在JNI 的本地实现中声明一个全局的对象管理类来解决,当新分配一个C++对象
时我们把它放进这个管理类,当finallize 执行时我们告诉这个管理类让它释放掉
这个类。最后我们在这个管理类的析构函数中释放掉所有未能被释放的 C++对
象。(该类参见表2.2 CObjectManager 类)
(2 )若原C++类提没有供了构造函数则我们在JAVA 端提供一个空参数的构造
函数(示例3.1 中的JA ),其余同(1)
注:每个JAVA 类都有4 个部分Part1, Part2, P art3, Part4
1.3 关于关于多态问题的解决:
当C++ 中的函数返回类型为基类类型的指针而实际返回的是C++子类的对象时,
相应的转到JAVA 后也要返回的是JAVA 基类类型但是要返回实际的JAVA 子类
对象,这时需要在C++端的基类中提供一个GetType 函数在JAVA 端根据不同的
类型返回不同的JAVA 子对象
2 .约定
2.1 类名
JAVA 系统内类名与C++类的类名一致,方法格式一致
2.2 关于类的创建:
参见1.2
2.3 每个 JAVA 类都有四个部分.如表 2.1 所示。(此处以类
JA 为例)
其中用到一个全局的类
public class FromReturn(){}
是一个空类,用在传给JAVA 类的构造函数的参数,用于标注不要在构造函数中
创建C++对象。这种情况适用于在原C++系统中返回一个类的情况。
表2.1 对JAVA 类的约定
对JAVA 类的约定(以类JA 为例),共分四个部分Parts1 和 Part2 中的方法除 JA(FromReturn ,int exestPtr)
这个构造函数外,其余的函数都要在Part3 中的函数来实现,即Par3 为Part1 和Part2 提供服务,而Part3 通
过JNI 调用本地方法
public class JA {
//Part 1 construct 与finallize,必须提供=================================================
protected J
您可能关注的文档
- AppManager_一种基于服务的机群任务管理系统.pdf
- Approximate Separability for Weak Interaction in Dynamic Systems.pdf
- Aptitude Evaluation Answer Sheetcandidate.xls
- apr中内存分配子的current_free_index成员作用.pdf
- AP物理和生物考前过一遍.docx
- ArcEngine 渲染的使用.doc
- ArcGISAPIForSilverlight实例分析.doc
- arcgisengine开发的实验.doc
- ArcGIS中两种网络分析对比.doc
- ArcGIS利用制图表达制作粗细不等的河流.docx
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)