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中有两个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
- C++调用Java又一方法
- c调用java方法
- java读取命令行参数又一方法
- jni - c 调用java方法
- ASP.Net实现验证码(c#) 又一方法
- Java调用C语言DLL文件方法
- android C调用JAVA的方法
- C中调用JAVA的参数、方法
- JAVA如何调用C/C++方法
- JAVA中调用C语言方法
- 使用C程序调用Java类方法
- linux C 调用JAVA的参数、方法
- java 调用本地C/C++方法:jni
- JNI中C调用Java方法
- JNI中C调用Java方法
- C#/Java 调用WSDL接口及方法
- JNI:JAVA调用C库方法
- JAVA如何调用C/C++方法
- 美女宿舍的骚扰电话
- 做人
- windows下安装和配置php5,apche2,mysql5,phpMyAdmin2.8.0.3
- 海波专栏(水晶报表)
- Hibernate的配置问题(1)--桌面程序的配置
- C++调用Java又一方法
- 对话美华裔教育家:中国大学教育最需要什么
- PHPMYADMIN配置
- P2P之UDP穿透NAT的原理与实现
- 正则表达式
- 考研??
- 解析#pragma指令
- 运用SgmlReader类来解析HTML文件,并生成格式规范(well-formed)的HTML。
- 想把我唱给你听。。