java调用C++详解

1、编写一个简单的JAVA类(Test.java)

public class Test {
    public native void firstTest(); 
    public static void main(String[] args) {
    }
}

这段代码中,使用native关键字来修饰firstTest()方法。这个firstTest方法就是将要在C或者C++中实现的方法。

2、获得.h头文件

首先确保环境变量配置正确。编译Test.java类,我的项目目录是:E:\Java#project\Jni。然后在CMD下执行以下命令:

这里写图片描述

命令运行成功后,会在E:\Java#project\Jni\bin目录下生成com_test01_Test.h文件。

刚才使用javah命令是JDK自带的命令,就是用来生成.h文件的。如果想查看javah,请打开JDK目录:D:\Program Files\Java\jdk1.6.0_13\bin。

3、编写C++.NET程序
(1)打开VS2008,新建一个C++工程,如下图:

这里写图片描述

(2)将com_test01_Test.h头文件引入到项目中

这里写图片描述

将D:\Program Files\Java\jdk1.6.0_13\include下的jni.h文件 和 D:\Program Files\Java\jdk1.6.0_13\include\win32下的jni_md.h文件拷贝到项目根目录下,打开将com_test01_Test.h,将最上面的#include

#include "jni.h" /* Header for class com_test01_Test */
#ifndef _Included_com_test01_Test
#define _Included_com_test01_Test
#ifdef __cplusplus
extern "C" {
JNIEXPORT void JNICALL Java_com_test01_Test_firstTest   (JNIEnv *, jobject);
#ifdef __cplusplus }
#endif
#endif

其中JNIEXPORT void JNICALL Java_com_test01_Test_firstTest(JNIEnv *, jobject); 就是第一步Test.java类中firstTest()方法在C++.net程序中的体现,下面将Java_com_test01_Test_firstTest这个方法在Jni01.cpp中实现一下,然后编译整个项目。Jni01.cpp的代码如下:

#include "stdafx.h"
#include "WINSCARD.H"
#include "com_test01_Test.h" using namespace System;
int main(array<System::String>args) {    
Console::WriteLine("Hello World");    
return 0;
}
//实现Java_com_test01_Test_firstTest方法
JNIEXPORT void JNICALL Java_com_test01_Test_firstTest(JNIEnv *, jobject){  
Console::WriteLine("第一个Jni小程序");
}

4、将Jni01.dll配置到环境变量中

上一步操作编译完成后,打开项目文件,我的电脑上目录是:E:\C#project\Jni\Debug,找到Jni01.dll文件,这个文件就是最后得到的dll。为了JAVA程序运行时能找到这个DLL,所以要在环境变量上配置一下,找到环境变量中的”path“,打开如下图所示:
将C++.net程序的项目debug文件夹路径E:\C#project\Jni\Debug 配置到环境变量。如图:

这里写图片描述

5、在Java程序中测试一下。
在第一步操作中的Test.java类的main方法中写如下测试代码:

public static void main(String[] args) {   
System.loadLibrary("Jni01");   
new Test().firstTest();  
}

其中System.loadLibrary方法就是用来加载DLL文件的,参数名就是DLL文件的名字(注:本列中DLL文件是Jni01.dll,这里的参数只填写Jni01,没有后缀名)。

运行Test.java,效果如下:

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值