1Java程序通过JNI调用本地C++_第一个示例_HelloWorld

javacode:TestNative.java
 
package com.cloud;
public class TestNative {
	public static void main(String[] args) {
		System.loadLibrary("NativeTestCodeDLL");
		new TestNative().sayHello();
	}
	/**
	 * 编写java程序,方法必须用native修饰,并且方法不可以有实现体。
	 * 调用【native>本地的】c/c++程序
	 */
	public native void sayHello();
}


生成c++头文件为:com_cloud_TestNative.h

 

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

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

#ifdef __cplusplus
}
#endif
#endif


 

 

 

 

 

 

编写Java程序通过jni调用c、c++程序

1 编写java程序,编写一个 声明调用c++的实现方法,方法必须用native修饰,并且方法不可以有实现体。
2 用jdk自带的javah命令,运行cmd命令行切换到class文件的目录下,或者指定classpath
3 在cmd命令行输入【javah java文件全类名】生成class文件所对应的c++头文件【.h文件】 。class目录下生成了.h的文件代表生成头文件成功。
4 用c++的ide VS2010 创建c++项目》Win32》Win32控制台应用程序》,输入项目名称,下一步》选择DLL>选择 空的工程。然后生成项目。
5 把刚才javah命令生成的头文件【.h】文件复制到c++工程下面,然后在VS里选中:头文件》鼠标右键》添加》现有项,选择复制过来的头文件【.h】。
6 选中:源文件》添加》新建项》c++文件(.cpp)。输入文件名,创建文件。
7 打开复制进来的头文件,复制方法到创建的.cpp文件里。
8 编写c++代码
示例如下:
#include"com_cloud_TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_com_cloud_TestNative_sayHello(JNIEnv * env, jobject obj)
{
 cout<<"Hello Word"<<endl;
}

9 编译。会发生错误。
第一个提示缺少jni.h文件,将jdk\include下面的jni.h文件拷贝到c++工程下,并且把<>括号修改为双引号,示例:#include "jni.h"
第二个提示缺少#include "jni_md.h",在jdk\include\win32里找到jni_md.h,复制到c++工程下。
编译通过。生成了c++项目的DLL文件。ok。
10 把dll动态链接库路径设置到环境变量Path中。
11 编写Java程序调用DLL动态连接库。java中用System.loadLibrary("TeatNative");DLL的文件名,不包含扩展名。加载TestNative.dll文件。
如果出错,需要eclipse重启,让eclipse启动的时候会重新加载环境变量
12 执行调用,输出HelloWorld,成功!!!。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值