Java 调用c/c++程序

 Java 调用c/c++程序

1.编写java程序:

package com.jiangzeyun.jni;

/**

 * 

 * @author jiangzeyun

 * jni本质上就是jva代码调用动态连接过程(在windows上,动态连接口就是一个dll文件,在linux上动态链接库so文件)

 */

public class HelloWorld {

static{

System.loadLibrary("jniTest");//,动态链接库,不要加后缀名

}

/**

 * 定义一个本地方法

 */

public native void output();

public static void main(String[] args) {

HelloWorld test=new HelloWorld();

test.output();

}

}

2.编译该文件生成class文件

3.生成头文件

 

之后会生成一个com_jiangzeyun_jni_HelloWorld.h文件

 

打开这个文件(此文件最好不要去改动):

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class com_jiangzeyun_jni_HelloWorld */

 

#ifndef _Included_com_jiangzeyun_jni_HelloWorld

#define _Included_com_jiangzeyun_jni_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     com_jiangzeyun_jni_HelloWorld

 * Method:    output

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_com_jiangzeyun_jni_HelloWorld_output

  (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

 

4.接下来去生成dll文件

我这里用vs2013生成dll文件步骤如下:

 

确定之后选择 应用程序类型为:DLL

 

然后完成

 

 

5.加载所需要的头文件:

加载com_jiangzeyun_jni_HelloWorld.h 

com_jiangzeyun_jni_HelloWorld.h拷贝到

 

目录下

加载jni.hjni_md.h

找到jdk安装路径,我们会看到Java\jdk1.7.0_17\include目录下有jni.hJava\jdk1.7.0_17\include\win32jni_md.h

右击在vs2013中创建的项目,选择属性选项

 

把刚才那两个目录加进去,效果图如下:

 

 

6.一切准备就绪,现在开始编写我们的c++代码:

 

 

 

其中JNIEXPORT void JNICALL Java_com_jiangzeyun_jni_HelloWorld_output

  (JNIEnv *, jobject){}函数是从com_jiangzeyun_jni_HelloWorld.h中拷贝

7,生成我们需要的dll

①右击项目--》生成

②在项目的Debug文件夹中找到jniTest.dll(因为我创建的项目是jniTest)

 

 

8.运行java程序调用我们所写的c++程序

①把jniTest.dll拷贝到Java\jdk1.7.0_17\bin 文件夹中

Java程序如下:

 

 

运行结果如下:

 

错误原因是我们生成的32位的dl,而本人机子是64位系统,所以需要生成64dll

9.生成64dll步骤如下:(32位系统不需要去生成64dll

 

②新建64位平台

 

 

③然后重新右击项目生成dll,再把改dll复制给javabin目录下即可

 

最后运行结果如下:

 

因为

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值