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,想不 到问题来了,对方不知道怎么去调用这 ...
随机推荐
- redmine fastcgi常常崩溃的解决方式
最终找到了解决方法,在以下的文件里加入两行就可以: /home/redmine/redmine-2.5.1/public/dispatch.fcgi require 'rubygems' requir ...
- 动态修改UINavigationBar的背景色
这是我们最终想要得到的效果: 思路 在UISrollView的delegate方法 1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView ...
- java编程排错技巧
一.Eclipse提示错误The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from re ...
- POJ 3694 LCA
题意:有N台电脑,他们之间有M条无向边. 然后询问,每次在他们之间加一条边,剩余的桥有多少. 思路:其实这题都不需要缩点了.. 直接记录每条桥的位置,然后每次询问进行一次LCA,当询问到桥时,桥数减1 ...
- 阻止IOS自动识别页面上的电话号码、email地址
之前写页面的时候碰到一个很恶心的情况,在6P上数字自动变色,后来找了一些资料: 在iOS的浏览器上,他们有时候会有一些“自作聪明”,自动把页面上的一串数字识别成电话号码,这样用户不小心点击这串数字,就 ...
- EF搭建可扩展菜单
EF实现可扩展性菜单 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...
- FullCalendar 的学习笔记(二)
下面是一个.NET webForm的具体列子 注意引用了artDialog 以及异步请求数据的json格式字符串 <html xmlns="http://www.w3.org/1999 ...
- 动态设置Head的Title、Descrption
HtmlMeta desc = new HtmlMeta(); desc.Name = "Description"; desc.Content = strTitle.ToStrin ...
- JavaScript---while和do while的区别
JavaScript,while 和do while的区别: 场景一:小盒子身上有100元,用while输出能吃多少次米线,一碗米线12元,最终还剩下多少钱. var money = 100; whi ...
- NYOJ 45 棋盘覆盖
棋盘覆盖 水题,题不难,找公式难 import java.math.BigInteger; import java.util.Scanner; public class Main { public s ...