C++调用Java又一方法

来源:互联网 发布:闲鱼淘宝小二介入几天 编辑:程序博客网 时间:2024/05/01 02:49
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++代码:地址
http://www.programsalon.com/downloads77/sourcecode/windows/other/detail295159.html
或者:到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交代一下:
boolJNI_CPP_StartVM(long_Ver);
就是载入一个JVM,参数是JDK中预定义的JDK的版本;默认是JNI_VERSION_1_4可跟据安装的JDK 来设置这个参数。这个函数并不是最现调用的函数,在此之前必须把我们要调用的java模块(一般都是.jar文件)告诉我们要创建的JVM ,调用的方法就是:
boolJNI_CPP_LoadJarLibrary(constchar* fileName);
可以多次调用这个函数,fileName参数可以是绝对路径,也可以是PATH变量中的文件路径调用,必须在调用       JNI_CPP_StartVM()前将所要用的java都装载完!;
还有其他几个函数我列一下,不多一共5个函数:
voidJNI_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中有两个exeJavaToCpp.exeJavaToCppFace.exe,同目录的还有DumpJar.jar,你只要运行JavaToCppFace.exe就可以了!可以将java类生成能调用的C++类,JavaToCppFace.exe每一个按钮都有ToolTip,使用简单!
 
下面举个例子:tool目录中有个工程,正是JavaToCppFace
1,首先有个JarDumpClass.java,可以看到所有需要的功能,并将其转换成jar文件(DumpJar.jar
2,打开JavaToCppFace.exeadd jar按钮(DumpJar.jar),-》just this按钮(会看到到JavaJar.JarDumpClass)-》add class (选中一个class) -》build(最后一步)
3,DumpJar.jar的目录中会有JAVA_JarDumpClass.cppJAVA_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
 
原创粉丝点击