java调用C++的过程
转自https://blog.csdn.net/yjhdxflqm/article/details/50503551
jni是java和C、C++通信的桥梁。
java适合写上层的应用,C、C++适合写底层的应用。因为C、C++就是跟底层打交道的。
当然这里并不讨论那么多,只是我要记住这一点,我所以做的工作就是如何使用jni,把留在.java中的本地的接口,让C,C++代码实现,然后供java接口使用。是的,我想做的工作就是这样。
一、在命令提示符下,用javah命令 使带有native接口的java源文件生成对应的.h文件,供C++语言实现。
我想补充内容:java源文件就是用java语言编写的以.java为后缀名的代码文件。
类文件是经过javac编译过后的字节码文件。
类文件通过jvm的解释翻译为本机能够识别的机器语言。
源代码是给程序员看的,类文件是给jvm看的,机器语言是给计算机的cpu用的。
简单的执行:
用javah命令生成本地接口类的头文件;
我想说的是:javah -jni Person 和javah Person似乎是一样的,但是在实际当中最好加上“-jni”这个参数
然后就是把Person.h这个头文件添加到vs2013下去编译成dll库文件。
这里也截个图,因为有时就连这简单的几步也走不下去,真的很累的。
到这里就可以引入头文件了。把头文件拷贝到工程的目录,不然你通过工程添加文件向导,还的重新包含该文件的路径,那样又麻烦了。
紧接着就是编译出DLL文件的过程。
然后把这个dll文件拷贝到桌面,因为Person.java文件在桌面呢,我这只是想 在命令提示符下简单实验而已。
修改Person.java源文件,加载dll文件,然后再次编译执行。
到这里为止,算是通过win7下的命令提示符,编译java的过程,以及C++语言实现java本地接口,java使用该接口的过程。
虽然这个简单的操作没有意义,其实我是想引入下一个话题,那就是自己在命令提示符符下面,使用javah命令,使java 原生文件生成.h文件是非常的麻烦的。能不能通过eclipse来简单配置一下,让我们自动生成.h文件更加的方便一些呢?答案肯定了!下面就继续截图。
由于我的建好过了,我就不再重复建了,我写这个文档的时候,实际是为了加深自己的记忆,但是真的害怕有人看到我的总结,看不懂会骂我,也为了帮助像我一样需要帮助的人,当遇到困难的时候,每有人帮助和理解,是真的很痛苦,有些东西,自己干琢磨,花费了很长的时间,抹杀了很大的信心,哎!
Name:Java_JavaH
Location:D:\Program Files\Java\jdk1.7.0_67\bin\javah.exe
Working Directory:${project_loc}${system_property:file.separator}\src
Arguments:-classpath ${project_loc}${system_property:file.separator}\src -d ${project_loc}${system_property:file.separator}\jni -jni ${java_type_name} 根据实际环境修改。
到这里eclipse下native接口文件自动生成.h文件的配置完成。
效果就是
到这里自动的生成native所对应的.h文件算是完成了。但是还有的问题就是引入编译后的DLL的问题,网上的说法不一,但是我的实验是:把Dll放到C:\Windows\System32目录下是可以引入的,但是配置放到环境变量path下是不行的,有的人说的很多,我都懵了。
但是总是放到C:\Windows\System32这么目录下也不行的,因为这是在windows下,如过在Max os下呢,所以,引用C++编译出来的dll文件,java文件在编译的时候,加载这个dll文件,如何让它识别呢?
看截图吧!
生成dll的文件,拷贝到一个项目下的目录中,比如我把他拷贝到jni目录。
然后添加引用。。。注意了
这篇文档记录的是java调用C++的过程!以后的内容会慢慢补充!
java调用C++的过程的更多相关文章
- 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数
1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...
- Java调用Oracle存储过程过程中几个问题
1.java.sql.SQLException: 无效的名称模式: STKSETTLEADMIN.TY_MARKETDATA 用户STKSETTLEADMIN下没有TY_MARKETDATA,类型TY ...
- 演示Java如何调用Mysql的过程和函数
这里只演示Java如何调用Mysql的过程和函数 --------------------------------------------------------------------------- ...
- Java通过JNI调用dll详细过程(转)
源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...
- Java调用ARM模板执行Azure Rest建立VM过程
Azure Resource Manager 提供一致的管理层,用于管理通过 Azure PowerShell.Azure CLI.Azure 门户.REST API 和开发工具执行的任务,所有工具使 ...
- 图解JAVA对象的创建过程
前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...
- 存储过程详解与java调用(转)
存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] ...
- java调用shell获取返回值
转自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839 1.shell文件return.sh echo 1 echo ...
- Windows7下的Java运行环境搭建过程图解
第一步:下载JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html,(由于Sun于20 ...
随机推荐
- Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob
Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob 在正式的项目开发中,单client不能满足我们的需求,须要实现client与服务端的连接. 而在编写Android服务端代码 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序---近来很多大型的平台都公开了Web API
1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...
- vue和miniui 一起使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OpenCV —— 摄像机模型与标定
这种理论看的已经够多了,感觉应用价值不大(矫正畸变图像还凑合,用摄像机测距神马的...) 有始有终吧,简单把内容梳理一下 针孔 摄像机模型 —— 过于理想(不能为快速曝光收集足够的光线) 透镜可以聚 ...
- java bigdecimal (java double也时会失真)
BigDecimal加减乘除运算 2011-11-21 21:22 6470人阅读 评论(0) 收藏 举报 stringdivjavaup工具 java.math.BigDecimal.BigDeci ...
- HDU 1495 很可乐(BFS 倒水问题)
题意 将体积为s的可乐 利用容积分别为n和m的两个杯子平均分为两份 至少须要倒多少次可乐 能够把容器s,n,m中装的可乐量看成一种状态 容器都是没有刻度的 所以每次倒可乐要么把自己倒完 要么把 ...
- 新手前端笔记之--css盒子
css盒子就是它的盒模型,所有css的布局都是以此作为基础的,很有必要来详细记录一下. 1.盒子的尺寸就是margin+padding+border+content的总和,这很好理解,但令人迷惑的可能 ...
- Manning.EJB.3.in.Action.2nd.Edition
Manning.EJB.3.in.Action.2nd.Edition http://files.cnblogs.com/files/rojas/EJB_3_in_Action_2nd_Edition ...
- go语言函数作为参数传递
go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致.非常的灵活. import "fmt" import "time" func goFunc1(f ...
- C# json 总结
json格式字符串转换为实体类,大括号 {} 表示对象,[] 数组表示列表. json文件读取到内存中就是字符串,.NET操作json就是生成与解析json字符串. 添加引用:using Newton ...