网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档