C++调用Java又一方法

C++ 调用 java
 
C++和java可以算是当今最流行的编程语言了。他们之间有许许多多的话题;这里我就来说一说C++调用java,其实这“说一说”有点说大了。前一阵子,趁有机会了解了JNI的一些东西,并按我的方法对JNI做了些封装,我就可以在C++ 中调用一些java写的功能了!
要运行java还是要在JVM(java虚拟机)里运行,还是需要有jre; 所以要C++中调用java是有前提的;
一.要安装好JDK,下载最新的JDK,设置好环境变量;
二.在path环境变量中添加%JAVA_HOME%/jre/bin/client; %JAVA_HOME%/jre/bin;(添加必要的dll)
通过以上两步就可以了;忘了最关键的,还要有封装了JNI功能的C++代码,
下载封装的C++代码:地址
或者: 到yahoo网站的邮箱 xwshare@yahoo.com.cn
用户:xwshare ,密码 alluser ,能找到 C++调用Java的代码和例子 的邮件(别删除)
若没有发信息到我的邮箱 xiao78xy@tom.com 如能下载到,那我们就继续吧!下载后解压,
注意: 说明一些:header 中是.h 文件source 中是.cpp 文件,lib 中是.jar 和.lib 文件,tool 中是一个很有用的工具,sample 是几个如何调用的简单的例子! 其他的是一些非必要的东西;
              可以直接用VC 打开JNI_CPP.dsw ,并设置vc 包含文件(JNI_CPP) 和lib(JNI_CPP/lib) 的路径!
 
首先,前面说过了要运行java还是要在JVM(java虚拟机)里运行,那么首先就要吧JVM载入我们的C++编写的程序的程序环境,也可以说是吧jvm嵌入到程序中,所谓的jvm就是jvm.dll(估计也是用C/C++编写的)中,既然是dll就和C++不远了,不是吗。好在安装JDK的时候,一切已经存在了,就是include和lib文件,有.h和.lib文件,这就很清楚了,再查看一些有关的资料就更容易了。不多说了,在封装的代码中有几个个API交代一下:
bool JNI_CPP_StartVM ( long _Ver );
就是载入一个 JVM , 参数是 JDK 中预定义的 JDK 的版本 ; 默认是 JNI_VERSION_1_4 可跟据安装的 JDK  来设置这个参数。这个函数并不是最现调用的函数,在此之前必须把我们要调用的 java 模块 ( 一般都是 .jar 文件 ) 告诉我们要创建的 JVM , 调用的方法就是 :
bool JNI_CPP_LoadJarLibrary ( const char * fileName );
可以多次调用这个函数 ,fileName 参数可以是绝对路径,也可以是 PATH 变量中的文件路径调用 , 必须在调用        JNI_CPP_StartVM() 前将所要用的 java 都装载完 !;
还有其他几个函数我列一下 , 不多一共 5 个函数:
void JNI_CPP_EndVM ();
 
JNI_Env *       JNI_CPP_StartSubEnv ();
void                JNI_CPP_EndSubEnv ();
 
JNI_CPP_EndVM() 很好理解,就是要卸载 JVM 时调用,最好要和 JNI_CPP_StartVM() 在同一个域中 ;
JNI_CPP_StartSubEnv() JNI_CPP_EndSubEnv() 也是于对必须在同一个域中调用的函数,确切的说是同一个线程中调用的函数; java 的一个运行环境只能对应一个线程,所以在不同的线程中调用 java 模块的功能就要首先调用 JNI_CPP_StartSubEnv ,结束是再调用 JNI_CPP_EndSubEnv() 回收一些资源!在个在例子 ThreadTest 中有调用!
以上的这些 API 已经介绍了,还不得不说一个工具,在 tool 目录的 cpp_build 中有两个 exe JavaToCpp.exe JavaToCppFace.exe ,同目录的还有 DumpJar.jar ,你只要运行 JavaToCppFace.exe 就可以了!可以将 java 类生成能调用的 C++ 类, JavaToCppFace.exe 每一个按钮都有 ToolTip ,使用简单!
 
下面举个例子 : tool 目录中有个工程,正是 JavaToCppFace
1, 首先有个 JarDumpClass.java ,可以看到所有需要的功能,并将其转换成 jar 文件( DumpJar.jar
2, 打开 JavaToCppFace.exe add jar 按钮 (DumpJar.jar) ,-》 just this 按钮 ( 会看到到 JavaJar.JarDumpClass) -》 add class ( 选中一个 class) -》 build (最后一步)
3, DumpJar.jar 的目录中会有 JAVA_JarDumpClass.cpp JAVA_JarDumpClass.h
   JarDumpClass.javap 文件产生, JarDumpClass.javap 文件是程序调用 javap.exe 产生的文件, .h .cpp 是根据这个文件生成了。
4, 将生成的 .h .cpp 放到专门的 JNI_CPP/javaClass 文件中,在 JavaToCppFace 工程中包含这个两个文件就是了;
5, 下面就可以看一下 JavaToCppFace 的代码就可以知道如何调用!
 
最后,通过以上的步骤一些简单的 java 类是可以轻松的在 C++ 中使用的。还有,这个封装还有很多不足的地方,比如没有加入 java 的异常处理;
 
就这样,有什么问题可以联系我 xiao78xy@tom.com
                              By   XiaoWei Date:20060508  QQ:286834426
 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值