`
yaochaosheng
  • 浏览: 52657 次
  • 性别: Icon_minigender_1
  • 来自: guangzhou
文章分类
社区版块
存档分类
最新评论

在java中调用C/C++

阅读更多

Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展

Java程序的功能。
java native方法是指本地方法,当在方法中调用一些不是由java语言写的代码或者在方法中用java语言,直接操纵计算机硬件时要声明为native方法。
java中,通过JNI(Java Native Interface,java本地接口)来实现本地化。
JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟

机直接嵌入到本地的应用程序中。图1是Sun站点上对JNI的基本结构的描述。
JAVA本地方法适用的情况
   1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
   2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
   3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
java下使用JNI调用C++的具体过程:
 1.创建java程序:声明一个native方法(不实现),在一个static块中加载动态链接库如:System.loadLibrary("native")
 2.编译java文件及通过javah命令生成c++头文件(javac HelloWorld.java 和javah -jni HelloWorld )
 3.将生成的头文件和jni.h(位于%java_home%/include下面)都include到C++程序中,在C++程序中实现该指定动态链接库中的本地方法
  (1)需要将以下文件复制到Visual Studio.net的安装目录下的\Vc7\include目录中才能使得C++程序成功编译成dll
  \jdk\include\jni.h \jdk\include\win32\jawt_md.h \jdk\include\win32\jni_md.h
  (2)还需要将上面生成的头文件放入C++项目下!
 4.将C++程序生成对应名称的dll(比如这里的hello),放到java程序bin下。则可通过java调用C++程序!!
  可以使用vs创建一个win32项目,在配置时设置为dll项目。在代码中实现上面生成的HelloWorld.h中声明的方法!!编译后在该 

  C++项目的debug目录下得到生成的dll文件,将该dll文件放入环境变量path中定义的library(比如system32下)!则可运行!!
(而C++调用java则有一系列接口函数可使用——当然要先吧jdk等使用到的dll加入到环境变量中去:比如为了初始化Java虚拟机,JNI提供了一系列的

接口函数Invocation API。通过这些API可以很方便地将虚拟机加载到内存中。创建虚拟机可以用函数 jint JNI_CreateJavaVM(JavaVM **pvm, void

**penv, void *args))

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics