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