Java调用C++

1.Myeclipse中新建一个Java工程。project name为JavaNativeInterface。
2.写一个本地方法声明,如下:
Java代码 复制代码  收藏代码
  1. package com.czq.test;   
  2.   
  3. public class NativeTest {   
  4.     public native void printInfo();   
  5. }  
package com.czq.test;

public class NativeTest {
	public native void printInfo();
}

3.cmd下进入工程的bin目录
(我的路径为:E:\MyEclipse\MyWorkSpace\JavaNativeInterface\bin)
执行命令javah -classpath . -jni com.czq.test.NativeTest
执行此命令后,会在当前目录下产生一个.h文件(c/c++的头文件) 这一步非常重要
4.打开VC(我的是microsoft visual studio 2010)。
新建->项目->Win32项目->完成。
新导航界面选择dll->完成。
项目的名字也是JavaNativeInterface
5.将com_czq_test_NativeTest.h(执行第三步javah命令得到的.h文件)、jni.h、jni_md.h引入头文件夹中。
com_czq_test_NativeTest.h由执行第三步javah命令得到;
jni.h位于%JAVA_HOME%/include下;
jni_md.h位于%JAVA_HOME%/include/win32下。
如果IDE提示头文件引入有问题,将com_czq_test_NativeTest.h中第二行的
#include <jni.h>改为#include "jni.h"
tip:这3个头文件缺一不可!
6.拷贝com_czq_test_NativeTest.h中的
C++代码 复制代码  收藏代码
  1. JNIEXPORT void JNICALL Java_com_czq_test_NativeTest_printInfo   
  2.   (JNIEnv *, jobject);  

至VC项目中的主CPP文件中,并添加自己的c++代码,整个主CPP文件中的代码如下:
C++代码 复制代码  收藏代码
  1. // JavaNativeInterface.cpp : 定义 DLL 应用程序的导出函数。   
  2. //   
  3.   
  4. #include "stdafx.h"   
  5. #include "com_czq_test_NativeTest.h"   
  6. #include <iostream>   
  7.   
  8. using namespace std;   
  9.   
  10. JNIEXPORT void JNICALL Java_com_czq_test_NativeTest_printInfo(JNIEnv *, jobject){   
  11.     int sum=0;   
  12.     for(int i=1;i<=100;i++){   
  13.         sum+=i;   
  14.     }   
  15.     cout<<"1加到100的值是:"<<sum<<endl;   
  16. };  

逻辑部分的代码可自行修改。
7.生成此VC项目的dll文件,并拷贝至%JAVA_HOME%/bin目录下(此目录可更改,后面会提到)。
8.返回Myeclipse中的JavaNativeInterface工程,新建一个测试类,代码如下:
Java代码 复制代码  收藏代码
  1. package com.czq.test;   
  2.   
  3. public class MainTest {   
  4.     public static void main(String[] args) {   
  5.         System.loadLibrary("JavaNativeInterface");   
  6.                   //JavaNativeInterface为生成的dll的名字   
  7.         NativeTest nativeTest=new NativeTest();   
  8.         nativeTest.printInfo();   
  9.     }   
  10. }  
package com.czq.test;

public class MainTest {
	public static void main(String[] args) {
		System.loadLibrary("JavaNativeInterface");
                  //JavaNativeInterface为生成的dll的名字
		NativeTest nativeTest=new NativeTest();
		nativeTest.printInfo();
	}
}

运行main方法,控制台即会打印出"1加到100的值是:5050"。
===================到此java调用c++就结束了。======================
关于第七点dll文件的存放目录,做以下说明:
大家先运行一下此java代码
Java代码 复制代码  收藏代码
  1. package com.czq.test;   
  2.   
  3. public class EnvTest {   
  4.     public static void main(String[] args) {   
  5.         System.out.println(System.getProperties().getProperty("java.library.path"));   
  6.     }   
  7. }  
package com.czq.test;

public class EnvTest {
	public static void main(String[] args) {
		System.out.println(System.getProperties().getProperty("java.library.path"));
	}
}

打印的结果实际上就是环境变量。
java要调用的dll文件只有在这些目录下才有效,否则会抛出异常。
所以,可以自定义一个目录来存放这些dll。当然,自定义的目录需要在环境变量中配置路径。我更改的系统的path变量,重启机器后生效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值