java和python混合编程_浅谈C++与Java混合编程
在学习编程的过程中,
我觉得不止要获得课本的知识,
更多的是通过学习技术知识提高解决问题的能力,
这样我们才能走在最前方,
更
多
Java
学习,请登陆疯狂
java
官网。
现实的情况是,
真实的项目中,
通常是涉及多种编程语言,
举几个简单的例
子,一个软件为了快速开发,可能是使用
Delphi
或
VB
作为界面开发首选语言,
底层的指令或核心算法,
会使用
C/C++
处理,
涉及数据处理的时候,
为了安全和
快速开发,会使用
Javascript
或
Python
等脚本语言实现数据分析处理。因此,开
发者应该学习或掌握语言混合编程。
C++
和
Java
是主流的两种编程语言,但是
现在整个网上对实现这两种语言混合编程的资料少之又少,
却又说之不全,
并且
有时多种问题现在也含糊不清,
对正在学习或使用这两种语言的朋友造成很大的
困扰。
本人的这篇拙作,
希望对使用这两种语言混合编程学习的朋友可以抛砖引
玉。
实现原理
实现
Java
和
C++
的交互,
使用的技术是称为
JNI( Java Native Interface )
,
C++
编写的程序,只要实现
JNI
生成的接口,则可以让
Java
程序调用,而
Java
编写
的程序,
C++
调用,则需要运行
Java
虚拟机,通过
JNI
查询调用
Java
实现的方
法。
环境变量设置
本文中使用的
Java
的版本是
( build 1.6.0_03-b05 ),C++
的版本为
VC++ 6.0
版
本。并根据你本机上的
Java
和
C++
安装目录设置以下的环境变量注意不要缺少
Java
的
include
和
lib
这三个红线标出部分
(
为源码包文件中的
cpp-env.Bat
这个批
处理文件
)
。
设置
Java
的环境变量,如下图所示
注意红线标注的这处部分,这部分与
C++
调用
Java
的方法时候影响非常重
要
(
为源码包文件中的
java-env.Bat
这个批处理文件
)
。
在
command
模式运行这
两个批处理文件后,就可以在
command
模式运行
demo
程序了。
Java
调用
C++
的方法
源码文件中
%SRC%/Java-cpp
目录中的
WinFile.java
的这个文件
(Java
语法
规定类名与文件名必须一致
)
,
定义了一个
WinFile
类,
这个类的内容如下在代码
的第
18
行,声明一个带
native
属性的方法
GetFilesFromDir
,这个方法传入一个
字符类参数,并返回一个字符类参数,而
System.loadLibrary
则会加载指定的共
享链接库,参数所示加载的动态库为
libwinfile.dll
,在
windows
平台上,执行时
会自动加入后缀
.dll
。
在
command
模式运行以下命令:
第一条命令则会生成
WinFile.class
的编译文件,而第二条命令则会生成
WinFile.h
这个头文件,
这个头文件包含了
WinFile.java
中的
native
的方法的
C/C++
语言的定义。
在
C/C++
的语言定中,
Java
语言的
String
的定义为
jstring
,注意,
Java
的语
言的字符与程序的编码都是以
UTF-8
编码实现的,
所以
Java
中的中文字符在
C++
的方法中如果没有编码转换,
则会显示为乱码。
同理,
在
C++
的方法中将中文字
符返回给
Java
,如果没有将字符编码转为
UTF-8
,在
Java
的方法显示同样会是
java和python混合编程_浅谈C++与Java混合编程相关推荐
- python实例编程_浅谈如何编程Python3——Python实例(3)
浅谈如何编程Python3--Python实例(3) # 测试实例一 print("测试实例一") str= "runoob.com"print(str.isa ...
- python编写函数_浅谈Python 函数式编程
匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...
- php和java的区别菜鸟教程_浅谈Java和PHP的主要区别
当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...
- java的向下转型_浅谈Java向下转型的意义
一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向 ...
- python配置核_浅谈pytorch卷积核大小的设置对全连接神经元的影响
3*3卷积核与2*5卷积核对神经元大小的设置 #这里kerner_size = 2*5 class CONV_NET(torch.nn.Module): #CONV_NET类继承nn.Module类 ...
- java方法区对象类型_浅谈Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- python float 精度_浅谈Python里面小数点精度的控制
要求较小的精度 round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the built-in types s ...
- python 迭代器协议_浅谈Python中的生成器和迭代器
迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...
- java socket 异步回调函数_浅谈socket同步和异步、阻塞和非阻塞、I/O模型
原标题:浅谈socket同步和异步.阻塞和非阻塞.I/O模型 在进行网络编程时,常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式 同步/异步主要针 ...
最新文章
- http https
- 计算机与程序设计语言教案,计算机程序设计(c语言)教案
- 字符输出流的续写和换行
- lua实现多继承-方式1
- Linux网络设置(第二版) --Linux网络设置
- python使用ide_python使用什么ide?[关闭]
- Map遍历KeySet()和EntrySet/ Map.forEach的性能分析
- autocad字体ccfang,求CAD字体hzmsdi.shx 发到我邮箱,185955330@qq.com
- _beginthread, _beginthreadex
- qemu中vCPU对应的线程
- 站酷暂停更新怎么办?这18个免费设计资源网站值得收藏!
- db2导出适用于mysql的数据_db2数据库导出导入数据库
- 熊拍拍是什么?熊拍拍是下一个风口吗?
- python编译原理 书籍_如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥?...
- 深入理解IGP-ISIS——ISIS邻居建立过程,影响ISIS邻居建立因素,ISIS报文
- linux查看某个端口的流量_linux流量查看工具汇总
- 3_按钮开关控制的计算机串口通信
- python获取json中的某个值_json文件返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
- 面试必考之Java基础数据类型
- 最强大脑魏郭撕X,理科男与文科生的…
热门文章
- python123第五周作业答案_马哥2016全新Linux+Python高端运维班第五周作业
- 360怎么看电脑配置_电脑速度慢怎么办?教你电脑速度慢的原因与解决方法
- lstrip在python中是什么意思_什么是一目均衡图?如何利用一目均衡图来做交易?...
- java 程序执行后 强制gc_【GC系列】JVM的常用GC参数及GC日志解析
- [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)
- 奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用
- oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
- SQL语句(DQL)
- *PAT_B_1005_Java(25分)
- 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?