JNI_最简单的Java调用C/C++代码
JNI_最简单的Java调用C/C++代码
JNI。是Java Native Interface的简称,中文是“Java本地调用”。通过这种技术能够做到下面两点:
- Java程序中的函数能够调用Native语言写的函数。Native一般指的是C/C++编写的函数。
- Native程序中的函数能够调用Java层的函数,也就是说在C/C++程序中能够调用Java的函数。
- javah工具的使用方法
- 依照C/C++头文件来编写C/C++源文件
- 将C/C++源文件编译成动态连接库(DLL)
- 在Java程序中引入动态连接库等知识
- 首先在Java类中声明一个native的方法
- 使用Javah命令生成native方法的声明的C/C++头文件
- 依照生成的C/C++头文件来编写C/C++源文件
- 将C/C++源文件编译成动态链接库(DLL)
- 将DLL文件加入到PATH环境变量下
- Java类中载入DLL,然后调用声明方法
package com.wwj.nativecode;
public class TestNativeCode {
// 声明本地方法
public native void sayHello();
public static void main(String[] args) {
// // 载入动态链接库
// System.loadLibrary("nativeCode");
// TestNativeCode nativeCode = new TestNativeCode();
// nativeCode.sayHello();
}
}
凝视掉的代码后面非常快会用到,临时不用管。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_wwj_nativecode_TestNativeCode */ #ifndef _Included_com_wwj_nativecode_TestNativeCode
#define _Included_com_wwj_nativecode_TestNativeCode
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_wwj_nativecode_TestNativeCode
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_wwj_nativecode_TestNativeCode_sayHello
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
接着在Visual studio中创建一个win32控制台应用程序。取名为nativeCode:
1> source.cpp
1>c:\users\administrator\documents\visual studio 2012\projects\nativecode\nativecode\jni.h(45): fatal error C1083: 无法打开包含文件:“jni_md.h”: No such file or directory
========== 生成: 成功 0 个。失败 1 个,最新 0 个,跳过 0 个 ==========
package com.wwj.nativecode;
public class TestNativeCode {
// 声明本地方法
public native void sayHello();
public static void main(String[] args) {
// 载入动态链接库
System.loadLibrary("nativeCode");
TestNativeCode nativeCode = new TestNativeCode();
nativeCode.sayHello();
}
}
执行java项目,假设声明了环境变量之后,没有重新启动Eclipse会报这种错:
JNI_最简单的Java调用C/C++代码的更多相关文章
- 最简单的Java调用C/C++代码的步骤
1)首先在Java类中声明一个native的方法 (2)使用javah命令生成包含native方法声明的C/C++头文件 (3)按照生成的C/C++头文件来写C/C++源文件 (4)将C/C++源文件 ...
- JAVA调用c/c++代码
JNI是Java Native Interface的缩写,中文为JAVA本地调用.使用JNI可以很方便的用我们的Java程序调用C/C++程序.很多时候,某些功能用Java无法实现,比如说涉及到底层驱 ...
- java调用c/c++代码简单实现以及遇见的坑
以下内容均来自互联网,感谢你们的分享,我只是使用的时候看这方便,可以称呼我“搬运工” 如有不合适的地方请与我联系,我会及时改正 首先你可能会遇见以下错误 第一个错误是你在vs编译器没有选择使用rele ...
- (转)java调用python脚本
这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...
- java调用kettle_导入jar包(1)
版权声明:本文为博主原创文章,未经博主允许不得转载. Java调用Kettle执行任务或转换,需要使用Kettle中的jar,可以先导入lib目录中的几个基本的jar,如:kettle-core.ja ...
- python程序调用C/C++代码
这篇用来记录在些模拟Canoe生成CAN数据桢工具时遇到的问题, 生成CAN数据桢,主要分为两个关注点: 1.如何从can信号名获取到can信号的ID长度以及信号的起始位,并将信号值按照一定的规则填写 ...
- java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...
- Rsession让Java调用R更简单
Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...
- 用java调用.net的wcf其实还是很简单的
前些天和我们的一个邮件服务商对接,双方需要进行一些通讯,对方是java团队,而作为.net团队的我们,只能公布出去的是一个wcf的basicbinding,想不 到问题来了,对方不知道怎么去调用这 ...
随机推荐
- Hibernate框架增删改查
package cn.happy.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org ...
- 01我为什么学Unity3d
首发于游戏蛮牛论坛&&我的CSDN博客:http://blog.csdn.net/wowkk/article/details/18571055 转载请说明出处.谢谢. 本人现大学生,带 ...
- qt超强精美绘图控件 - QCustomPlot一览 及 安装使用教程
1.概述 QCustomPlot 是一个超强超小巧的qt绘图类,非常漂亮,非常易用,只需要加入一个qcustomplot.h和qcustomplot.cpp文件即可使用,远比qwt方便和漂亮,可以自己 ...
- iOS:UI系列之UIScrollview和UIPagecontrol
转眼间,又是一天,就这样忙忙碌碌的一天一天的过着, 不过还好,不是浑浑噩噩的,也算是小有所成,劳有所获吧,嘿嘿! 好了,到了总结的时间啦, 下面就为大家简单讲解下我今天学习的内容吧,希望对各位都有所帮 ...
- IoC容器Autofac正篇之类型注册(四)
Autofac类型注册 类型注册简单的从字面去理解就可以了,不必复杂化,只是注册的手段比较丰富. (一)类型/泛型注册 builder.RegisterType<Class1>(); 这种 ...
- box-shadow讲解1
谈谈box-shadow的具体使用方法 语法: E {box-shadow: <length> <length> <length>?<length>?| ...
- Android的Fragment中onActivityResult不被调用的解决方案
常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityF ...
- iOS-OC-基础-NSArray常用方法
NSArray常用方法和属性 // ——————————————————————数组常用方法—————————————————————— // 1.计算数组元素的个数: count NSArray * ...
- jetty 8.1.8 PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
应该是jdk和jre配置问题,建议看看这个博客:http://blog.csdn.net/nba_2011/article/details/7219750里边查看配置方法很清楚
- yii2 打印sql语句
echo $temp_chat_query->createCommand()->getRawSql();