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创建一个类
二、生成.h文件
cmd进入该Java项目下的bin目录,并执行"javah 类全名"命令:
打开com_jni_Demo.h,将#include<jni.h>改成#include "jni.h":
三、用VS2010生成.dll文件
1. 新建项目 - 选"Win32 控制台应用程序" -输入项目名称 - 点确定 - 下一步 - 选DLL,空项目 - 完成
2. 在该项目中新建一个.cpp源文件
Demo.cpp:
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"
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"
相关文章推荐
- java使用JNI调用C++代码(vs2010生成dll文件)
- java使用JNI调用C++代码(vs2010生成dll文件)
- JNI 调用C++代码 并在C++代码中调用Java传递进来的接口
- window下利用JNI在java代码中调用c/c++接口
- Cocos2d-x中通过JNI进行C++调用Java代码
- JNI(1) 在java中调用本地c++代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- 在java中调用c/c++代码的方法(jni)
- 在java中调用c/c++代码的方法(jni)
- Java利用JNI调用c++代码简易例子演示
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- Cocos2d-x中通过JNI进行C++调用Java代码
- Cocos2d-x中通过JNI进行C++调用Java代码
- 使用JNI进行混合编程:在C/C++中调用Java代码
- 用JNI进行Java编程---从C/C++程序调用Java代码
- Jni 参数传递与操作——(C/C++ 代码与 java 代码的互相调用)
- jni技术 java代码调用c++代码返回字符串
- VS2010 通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)!
- 在java中调用c/c++代码的方法(jni)