JNI学习系列——java中调用C/C++

java中调用C/C++

                对JNI的初步认识请看上篇 JNI学习系列——初步认识JNI,本编将介绍怎样编写一个简单的JAVA程序来调用C\C++;

    1. 编写带有native声明的方法的java类   TestNative.java

package com.yin.jni;


public class TestNative {
	
	//native关键字 声明本地化方法,不需要用JAVA代码具体实现
	public native void sayHello();
	
	public static void main(String[] args) {
	
	}
}
    2.进入 TestNative.java 所在的过程目录 运行 javac TestNative.java 编译生成.class文件,运行 javah TestNative 会生成一个 com_yin_jni_TestNative.h 的头文件,
该文件名是由 包名 + jni + 类名  组成  ;
com_yin_jni_TestNative.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_yin_jni_TestNative */

#ifndef _Included_com_yin_jni_TestNative
#define _Included_com_yin_jni_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_yin_jni_TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_yin_jni_TestNative_sayHello (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
Java_com_yin_jni_TestNative_sayHello (JNIEnv *, jobject) 即为编译后为JAVA中sayHello生成的c++方法,由 java + 包名 + jni + 类名 + 方法名 组成;
  3.新建一个C++工程 我用的是vc++ 6.0 新建——>工程——>Win32 Dynamic link libnary ——>空的.dll 工程;工程名为 NativeCode
将com_yin_jni_TestNative.h 导入工程的Head Files 中 ,在 Source Files中新建 source.cpp文件 ,将JNIEXPORT void JNICALL Java_com_yin_jni_TestNative_sayHello  (JNIEnv *, jobject) 这句代码复制到 source.cpp; 同时为 (JNIEnv *, jobject)  添加参数 修改为 (JNIEnv * env, jobject  obj).

  4.编译刚刚的c++工程,这时会报错 can‘t find “jni.h” 找不到jni.h 这个头文件 ,这时需要将 jni.h 文件复制到 工程的目录下 ,jni.h在JAVA的JDK的include的目录下,
同时将win32中的jni_md.h一起复制,因为jni.h 会调用此文件;
    此处还需注意 引入 jni.h 时 用 # include<jni.h>可能会报错,改成 “jni.h”就可以了;因为 用# include<jni.h> 编译器会在系统的环境变量下的include中找,这样就找不到
该头文件了;

  5.编译成功后 会在C++工程目录下生成一个NativeCode.dll文件 这样就可以在 JAVA代码中调用该.dll文件了;
注意 :在调用之前 必须将该.dll文件所在的目录添加到环境变量中,不然运行程序时会找不到该.dll文件,同时要重启Eclipse 因为在Eclipse 启动是已经加载了当前系统的环境变量了,修改环境变量后 Eclipse 找不到新加的环境变量.

  6.在JAVA中调用生成的 .dll文件
package com.yin.jni;


public class TestNative {
	
	//native关键字 声明本地化方法,不需要用JAVA代码具体实现
	public native void sayHello();
	
	public static void main(String[] args) {
		//加载生成的 NativeCode.dll 文件
		System.loadLibrary("NativeCode");
		
		TestNative tn = new TestNative();
		//调用sayHello 方法
		tn.sayHello();
		
	}
}

运行该JAVA程序,控制台会打印 Hello,My first jni program ,这就代表你成功了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值