快速业务通道

用Jace整合Java和C++ - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
readGoogle() { try { /* 当Jace在内部执行NewObject时,它会检查是否有异常发生, * 如果JNI函数ExceptionOccurred返回一个异常,则Jace清除 * 该异常,创建一个相应的C++代理,并发出它。 */ URL url( "http://www.google.com" ); } /* 在这里,我们可以获得Jace发出的C++代理异常 */ catch ( MalformedURLException& e ) { cout << e; } }

自动类型转换

Jace提供C++和Java简单数据类型之间的自动数据类型转换。我们可以在C++代理需要java::lang::String的地方使用C++的std::string或char*,我们也可以在C++代理方法需要JBoolean、JInt和JChar简单JNI数据类型的地方使用bool、int和char等C++数据类型:

using jace::javax::swing::JFrame;   JFrame createFrame( const std::string& title, int x, int y ) {   /* JFrame的原型是JFrame( java::lang::String str );, * Jace自动地在std::string和java::lang::String之间进行转换。 */ JFrame frame( title );   /* setLocation的原型是setLocation( JInt x, JInt y );, * Jace自动地在int之间JInt进行转换。 */ frame.setLocation( x , y ); return frame; }

C++集成

Jace包括C++代理生成工具━━BatchGen,Jace开发人员对Java运行时间库环境(JRE)的rt.jar使用BatchGen生成C++代理类。Jace开发人员已经对这些生成的代理类进行修改,以更好地与C++语言和标准库进行集成。

例如,java.lang.Object有一个附加的操作符<<(ostream& out, Object& object),java.lang.String也有一些包括+()、=()和==()在内的附加方法,可以使它与std::strings和char*s更好地进行集成。

类型安全字段和方法访问

C++的代理生成是Java对象类型安全访问的基础。对于给定的Java类文件,Jace能够生成完全相同的方法和字段的C++代理类,我们可以以与调用Java中类似方法相同的方式调用C++代理方法,字段是通过同名的方法进行访问的:

/* 一个Java类 */ public class Foo { public int aField; public String aMethod( URL aURL ); }   /* 从C++中访问C++代理 */ Foo foo; foo.aField() = 14; String result = foo.aMethod( URL( "http://www.google.com" ) );

Jace提供了二种工具━━ProxyGen和BatchGen,我们可以用这二种工具从Java类文件中生成C++代理类。

用Jace整合Java和C++(5)

时间:2010-09-13

类型安全数组

我们可以使用Jace的模板JArray类访问Java的数据类型安全数组。根据数组的数据类型,Jace调用合适的Get<Type>ArrayElement()和Set<Type>ArrayElement() JNI函数:

JArray<JInt> intArray( 10 ); // 导致对NewIntArray的调用 int i = intArray[ 2 ]; // 导致对GetIntArrayElements和应用   JArray<String> stringArray( 5 ); // 导致对NewObjectArray的调用 std::string str = stringArray[ 2 ]; // 导致对GetObjectArrayElement的调用

Jace工具

ProxyGen和BatchGen可以用来生成C++代理类。ProxyGen用来处理一个类文件,BatchGen则用来处理一个jar文件中所有的类。

ProxyGen

ProxyGen能够将一个Java类文件的头部文件或源文件转出到标准输出。ProxyGen总是会包含生成的C++代理类中的public方法和字段,根据指定的访问水平,它也会包含protected、package或private方法和字段。

用法:ProxyGenerator <类文件> <头部 | 源文件> [ 选项 ]

选项可能是:

-protected :生成protected字段和成员

-package :生成package字段和成员

-private :生成private字段和成员

BatchGen

在生成C++代理类的头文件和源代码文件方面,BatchGen与ProxyGen非常相似。二者的不同之处是,ProxyGen只处理一个Java类文件,BatchGe

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号