用Jace整合Java和C++

摘要

Jace是一种免费的开放源代码的工具,它使我们能够轻松地开发JNI(Java本机接口)代码。本篇文章详细地分析了JNI API的问题,以及如何使用Jace解决这些问题。

如果没有更深的了解,我们一定会以为Sun设计JNI的目的是为了不让Java编程人员使用它。毕竟,类型安全形同虚设,缺乏错误检查机制,进行一次简单的Java方法调用需要4次或更多的JNI调用,这都是JNI明显的不足之处。另外,我们还必须管理JNIEnv指针,不能在多个线程中使用JNI调用,必须为每种可能的操作在9个函数调用中进行选择,而且异常信息的获取也非常地困难。这还只是JNI所出现问题的一部分,我们还能发现许多其他问题。

这些限制中的许多部份都与JNI与C语言的绑定有关,C语言本身对类型安全、异常处理机制的支持也非常不好。尽管目前大多数的编程人员都已经能够使用C++编写代码,但Sun没有放弃C编程人员,这也是JNI目前这种状况的原因。不幸的是,这种很难使用的API给开发人员带来了许多困难。

Jace是一款免费的开放源代码的工具包,旨在使JNI编程变得更加简单。它支持由Java类文件自动生成C++代理类以及C++与Java的异常、数组、包、对象的整合,管理Java引用的线程绑定和生命周期。更为重要的是,它能够使我们开发更小、更易于理解、在编译时类型安全的模块。

JNI的类型系统

Jace最基本的特点是它使用C++代理类来表达Java类型。为了真正地理解代理类的优点,我们首先需要来看看JNI的类型系统。Sun在JNI中使用了24种C类型来表示所有可能的Java类型。JNI包含有9个简单类型:

·jboolean

·jbyte

·jchar

·jshort

·jint

·jlong

·jdouble

·jfloat

·void

JNI有14种引用类型,如下图所示:


(图:picture01)

另外,JNI有一个复合型的类型jvalue,它能够表达所有的简单和引用类型。

时间: 2024-09-15 13:51:20

用Jace整合Java和C++的相关文章

在JavaScript程序中整合Java函数

问题的提出: 假定我们的HTML 页中有一些表单需要处理,并且我们需要初始化数据库中的字段,我们该怎么办?标准的解决办法就是使用CGI脚本或是使用Java Servlet等服务器端程序,但是你有没有想过,还可以编写一个脚本程序使你可以用JavaScript直接调用服务器端Java程序进行任何计算的结果,就像下面代码中列的那样: <html> 我们的表单<br> <form> <input type="text" name="textF

php-Eclipse怎么整合Java EE Developers和PHP Developers的功能?

问题描述 Eclipse怎么整合Java EE Developers和PHP Developers的功能? 我需要学习jsp和php所以下载了Eclipse IDE for Java EE Developers和Eclipse for PHP Developers两种开发工具,发现有很多重复的功能和文件我想要就一个eclipse集成两种功能,有没有将两款工具整合到一起的方法? 我知道可以直接用Eclipse IDE for Java EE Developers在线添加PDT但是我已经下好了Ecl

用JDom轻松整合Java和XML

dom|xml 概述: Jdom是用Java语言读.写.操作XML的新API函数.Jason Hunter 和 Brett McLaughlin公开发布了它的测试版本.在直觉.简单和高效的前提下,这些API函数被最大限度的优化.在接下来的篇幅里,Hunter 和 McLaughlin介绍怎么用Jdom去读写一个已经存在的XML文档. Jdom是一个开源的api,它以直接易懂的方式向java程序员描述XML文档和文档的内容.就象名字揭示的那样,Jdom是为java优化的.为使用XML文档提供一个低

整合 java + BlazeDS + spring + JDO 部署到 app 上.

先看到 一篇 部署到 app 上面的文章. http://www.iteye.com/topic/428326   感谢这个兄弟的研究.       先说昨天写的一篇 文章.   http://toeo.iteye.com/admin/blogs/641211   讲到 如果 创建 一个 java 和 BlazeDS的工程. 并且工程文件是放到一起的.   flex 和 J2EE 一起开发.   现在将工程 可以运行 app 上面. 开发 的东西直接部署到 google的服务器上面.   工程代

开发能够互操作的Web Services - 整合Java and Microsoft .NET

services|web Developing Interoperable Web Services - Integrating Java and Microsoft .NETInteroperability is one of the main promises of Web services. Web services are designed to be independent of the underlying operating system and programming langu

ssh整合-java Web 中提交数据信息时 报错

问题描述 java Web 中提交数据信息时 报错 Entering nullPropertyValue [target=[com.shyou.action.BusinessShopAction@1178dc3, com.opensymphony.xwork2.DefaultTextProvider@cbd684], property=bShop] Error setting expression 'bShop.personCharge' with value '[Ljava.lang.Stri

ssh整合-JAVA SSH Struts 关于a标签调用Action含参数就异常反之正常

问题描述 JAVA SSH Struts 关于a标签调用Action含参数就异常反之正常 struts 异常 Action path SSH 异常信息 There is no Action mapped for namespace [/dd] and action name [laladList] associated with context path [/baee]. - [unknown location] at com.opensymphony.xwork2.DefaultActionP

AceAdmin后台UI框架 整合 java

问题描述 说明:JAVASpringMVC+mybatis(oracle和mysql)HTML5全新高大尚后台框架1.支持APP手机应用(android和ios)接口调用(json接口可与其它程序对接)2.全新高大尚全HTML5+css3.0开发界面,美观漂亮时尚.前沿3.有ORACLE和MYSQL版本各一个4.框架搭建完善,在此基础上做过很多项目,身经百战,支持大并发,程序运行稳定5.基础功能已经完善组织管理:类似角色管理,分角色组和成员,有组权限和成员权限.菜单权限,独立分配增删改查权限.支

Java、XML、C#激情碰撞

xml   在微软与Sun公司为了Java的司法诉讼迈入第三个年头之际,视窗程序设计师不禁怀疑:Java有这么重要吗? 三年多前,Sun公司控告微软不支付Java授权费时,微软正在研发自己的Java版本,这种基于Sun的Java技术为基础的语言称为「J++」.但最近几个月来,微软改弦易辙,开始发展新的电脑语言「C#」,以与Java匹敌. 微软目前已宣布放弃Visual J++,今夏该公司的高层主管表示,微软未来发表的研发套装工具Visual Studio.Net中,将不把Visual J++列入