java程序调用c++的实现方法

java程序调用c++的实现方法

具体说明:一个java程序传递参数到c++程序,经过c++程序处理后将结果返回给java。

总体来讲,java运行的时间要大于c++的,所以当程序非常复杂时,可以将复杂的代码让c++实现,这样整个系统的运行时间会大大减少的。

实现方法如下:

1.首先 在记事本里写一个基本的java程序,后缀名为.java,我的程序的名字为 my.java .代码如下:

public class my{
static{System.loadLibrary("good");}//    加载动态链接库good
public native static int sum();     //实现两个数的相加,c++要实现的函数
public native static void set(int a,int b);//给c++传递参数,c++要实现的函数
public static void main(String args[]){
my mm=new my();
mm.set(3,4);
System.out.println(mm.sum());
}
}

2.在cmd中编译java程序,输入javac my.java。

3.使java程序生成my.h文件,输入javah my。  这样java部分的工作就算做完了。

my.h的代码:(这是自动生成的,不要修改,你可以查看,你可以分析一下里面的内容)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class my */

#ifndef _Included_my
#define _Included_my
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     my
 * Method:    sum
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_my_sum
  (JNIEnv *, jclass);

/*
 * Class:     my
 * Method:    set
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_my_set
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

c++部分:

1.打开vc++,新建Win32 Dynamic-llink library ,名字为good,和java中的static{System.loadLibrary("good");}//    加载动态链接库good
是对应的。其他的默认就行了。

2.然后再新建一个头文件,名字是任意的,把my.h中的代码复制进去即可。

3.然后新建一个c++应用程序,名字也是任意的,代码为:

#include "my.h"
int i=0,j=0;
JNIEXPORT jint JNICALL Java_my_sum  
(JNIEnv *, jclass){
 return i+j;}
JNIEXPORT void JNICALL Java_my_set
(JNIEnv *, jclass, jint a, jint b){
i=a;j=b;
}

4.编译生成good.dll,(出现问题,看下面的强调)注意只需要编译,不需要运行的,把生成的good.dll和my.class放在同一个位置,这样c++部分也算完成了。

5.运行java程序,输入java my,会输出 7,这是java程序传送的参数3,4的缘故。

强调:这就是整个过程的介绍,但是做的时候可能会遇到一些问题,如果编译c++时出现找不到jni.h的文件,不要急,你只需要把jdk文件下的include中的jni.h和include下的win32下的jawt-md.h和jni-md.h拷进vc安装包的include下即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值