您的位置:首页 > 编程语言 > C语言/C++

JNI Java调用c/c++代码 demo (用VS2010)

2016-12-07 21:55 525 查看
参考:

Java中JNI的使用详解第一篇:HelloWorld http://blog.csdn.net/jiangwei0910410003/article/details/17465085

(原先使用VC6,发现最后运行java的时候报"Can't load IA 32-bit .dll on a AMD 64-bit platform",就改成用VS2010了)

一、在MyEclipse创建一个类

package com.jni;

public class Demo {

//定义本地方法,用c/c++代码实现
public native void sayHello();

public static void main(String[] args){
//加载动态链接库
System.loadLibrary("Demo");
Demo demo = new Demo();
demo.sayHello();
}
}

二、生成.h文件

cmd进入该Java项目下的bin目录,并执行"javah 类全名"命令:

javah com.jni.Demo
执行成功后,在bin目录下会生成com_jni_Demo.h文件。

打开com_jni_Demo.h,将#include<jni.h>改成#include "jni.h":

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

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

#ifdef __cplusplus
}
#endif
#endif

三、用VS2010生成.dll文件

1. 新建项目 - 选"Win32 控制台应用程序" -输入项目名称 - 点确定 - 下一步 - 选DLL,空项目 - 完成







2. 在该项目中新建一个.cpp源文件

Demo.cpp:

#include <iostream>
#include "com_jni_Demo.h"
using namespace std;

//实现sayHello方法
JNIEXPORT void JNICALL Java_com_jni_Demo_sayHello(JNIEnv *env, jobject obj){
cout<<"Hello World"<<endl;
}


3. 把3个.h头文件复制粘贴到Demo.cpp所在目录下

(1)com_jni_Demo.h

(2)jni.h(在jdk安装目录/include下)

注:需要把jni.h文件中的#include<jni_md.h>改成#include "jni_md.h"

(3)jni_md.h(在jdk安装目录/win32下)

4. 改成64位

点"配置管理器..." - 点"<新建...>" - 选择"x64"平台,点“确定”







5. 此时如果执行Demo.cpp文件,会报:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

解决方法:右击项目,选"属性" - "配置属性" - "清单工具" - "输入和输出" - "嵌入清单",把"是"改成"否" - 点确定



6. 执行Demo.cpp,在项目根目录/x64/Debug目录下会有.dll文件

四、把该.dll文件所在文件夹路径添加到path环境变量中

五、重启MyEclipse,运行Demo.java的main方法,控制台就会输出"Hello World"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: