`

使用 JunC++ion 创建JNI

    博客分类:
  • JAVA
阅读更多

      在java中创建jni,都是通过一些命令,创建一些基本文件,然后在VS C++中,创建工程,导入那些文件,比较繁琐,不容易管理,而且c++中出了异常的话,java也不好处理。基于以上原因,我们可以使用JunC++ ion来使得整个过程自动化。


JunC++ion 创建JNI过程
     首先将所有的native方法的class放入一个单独的java工程里,在ANT文件中,配置好,运行后,可以生成一个c++工程。接下来只需在xxxuserImpl文件中,做参数转换和调用native方法实现,最后编译,链接生成dll。在Java中,这些参数不使用java基本类型而使用包装类型为好。在参数转换时,就完全可以采用标准c++类型来处理了。JunC++ion对java的基本类型,采用c++做了重写。如:java.lang.String,重写为:Java::lang::string.

 

总结:快速创建C++工程,便于管理,可以异常控制等等。

 

 Here's what you would do in Java:

  • design a Java type that exposes the desired API to Java applications and internally uses native methods to delegate to the C++ side.
  • run the javah tool to generate C declarations for for the required native methods.
  • implement all the native methods in a combination of C, JNI, and your own C++ code.

Here's what the same development process looks like when you're using JunC++ion:

  • design a Java type that exposes the desired API to Java applications and internally uses native methods to delegate to the C++ side.
  • run the code generator to generate delegating implementations for the required native methods.
  • implement all the native methods in a combination of generated C++ proxy classes and your own C++ code. 

The obviousness of the answer depends on your familiarity with JNI and on the scale of your integration problem. JNI is typically considered a rather unattractive integration technology because it's so error-prone and hard to use. When you're implementing native methods using JNI, you rarely have the luxury of only using your own code in the implementation. Much more frequently, you need to access elements on the Java side or create Java instances as return values, forcing you to call back into Java via JNI. Coding JNI by hand is a shortcut to an unstable appliation because it's trivially easy (even for an experienced JNI developer) to leak references or make other mistakes that will eventually lead to a hard-to-debug application failure. If you add C++ with its ability to throw exceptions to the mix, you almost certainly have a catastrophe that's just waiting to happen because your Java process will not tolerate a C++ exception thrown from within a native method.

 

分享到:
评论

相关推荐

    JAVA转换C++的工具和代码2.0

    很多时候,在JAVA中有不错的实现,比如一个LIB,一个CLASS。很想把它转换为C++实现。在网上找了很久,需望能找到一个工具,自动化一下。可惜,我一直没有找到,今天顺手写了一个,给大家分享。。...

    Junc-cli:JuncDT的脚手架工具

    Junc-cli就是这样一款工具,通过预设的模板和命令行交互,它可以自动化创建符合JuncDT规范的项目框架,从而免去手动设置的繁琐工作。 JuncDT,全称为"Junc Data Tool",可能是一个数据处理或数据分析相关的框架或库...

    junc:Java功能库

    junc-功能性Java ##背景在函数式编程中,开发人员通常坚持不变性的做法。 这些语言往往表现力很强,甚至语言的流控制元素也像函数一样返回值。 通常,只要您的程序停止按顺序处理代码,函数式编程和命令式编程就会...

    JUnC - Java Underdeveloped Compiler-开源

    **JUnC - Java Underdeveloped Compiler 开源项目详解** JUnC,全称为Java Underdeveloped Compiler,是一个教育性质的Java编译器项目。它的主要目的是为了帮助开发者深入理解编译器的工作原理,而非作为商业用途。...

    基于道路网的最短路径算法的研究与实现

    基于道路网的最短路径算法的研究与实现 很好的毕业设计资料哦

    硬盘安装助手 Leopard hd install helper v0.3

    这一过程在技术上被称为“本地硬盘安装”,它提供了一种无需物理光盘的便捷安装方式,尤其适用于那些没有光驱或者不希望使用USB驱动器的用户。 Leopard,全名Mac OS X Leopard,是苹果公司推出的第7版Mac操作系统,...

    激光对PIN结光电二极管热破坏机理的研究

    就高功率激光对PIN结光电二极管因热效应引起的硬破坏过程进行了理论和实验研究.提出激光的热效应与伴随等离子体扩展时向外喷溅形成的冲刷效应是导致硅光二极管被破坏的主要原因。得到了Q开关YAG激光与PIN结光电...

    Chameleon Install 1577(变色龙)

    在使用Chameleon Install 1577时,一个关键的步骤是将第一启动项设置为光驱。这意味着在计算机开机时,用户需要确保BIOS设置优先从光盘驱动器读取启动信息,这是因为Chameleon通常被刻录到光盘上作为一个启动媒介。...

    KeyRemap4MacBook.pkg

    这是mac系统修改键盘映射的一款工具软件,解压安装后在系统偏好设置那里找到。可以自己建立不同的映射关系。可以充当魔兽等游戏的改键工具,不过大部分都要自己去实现,网上有说明,所以这里只是提供工具的下载。...

Global site tag (gtag.js) - Google Analytics