java调用c++程序

         对于Java调用c++这块,一开始啥都不懂,找了很多资料,现在总算知道怎么弄了。感觉他们的有些地方没说太明白,我综合他们的,发这篇文章,希望对大家学习这块有用!

 

1 编写java类如
class HelloWorld {
 public native void displayHelloWorld();
 static {
 System.loadLibrary("hello");
 }

 public static void main(String[] args) {
  new HelloWorld().displayHelloWorld();
 }
}
注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。
方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,
它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)

2。编译java代码
javac HelloWorld.java 生成HelloWorld.class文件
注:这个只需运行java类就能得到对应的.class

3。创建.h文件
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行
javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下
在此我们不对他进行太多的解释。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

注:javah的另外一种简单的方法在下面介绍


4。 编写本地实现代码
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,新建一个工程!工程名称为HelloWorld(将生成HelloWorld.dll文件)
选择Win32 Dynamic-Link Library然后建立HelloWorld.cpp文件,内容如下

#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)   //这个名称是在HelloWorld.h中得到的
{
printf("Hello world!\n");
return;
}

注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。
配置如下:在工具-》选项-》目录 中添加路径加C:\JDK\INCLUDE和C:\JDK\INCLUDE\WIN32

 

★关键   dll文件需要存放到 jdk的bin目录或者system32下面
5 运行Java类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值