在学习编程的过程中,

我觉得不止要获得课本的知识,

更多的是通过学习技术知识提高解决问题的能力,

这样我们才能走在最前方,

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混合编程相关推荐

  1. python实例编程_浅谈如何编程Python3——Python实例(3)

    浅谈如何编程Python3--Python实例(3) # 测试实例一 print("测试实例一") str= "runoob.com"print(str.isa ...

  2. python编写函数_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  3. php和java的区别菜鸟教程_浅谈Java和PHP的主要区别

    当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...

  4. java的向下转型_浅谈Java向下转型的意义

    一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向 ...

  5. python配置核_浅谈pytorch卷积核大小的设置对全连接神经元的影响

    3*3卷积核与2*5卷积核对神经元大小的设置 #这里kerner_size = 2*5 class CONV_NET(torch.nn.Module): #CONV_NET类继承nn.Module类 ...

  6. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  7. python float 精度_浅谈Python里面小数点精度的控制

    要求较小的精度 round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the built-in types s ...

  8. python 迭代器协议_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  9. java socket 异步回调函数_浅谈socket同步和异步、阻塞和非阻塞、I/O模型

    原标题:浅谈socket同步和异步.阻塞和非阻塞.I/O模型 在进行网络编程时,常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式 同步/异步主要针 ...

最新文章

  1. http https
  2. 计算机与程序设计语言教案,计算机程序设计(c语言)教案
  3. 字符输出流的续写和换行
  4. lua实现多继承-方式1
  5. Linux网络设置(第二版) --Linux网络设置
  6. python使用ide_python使用什么ide?[关闭]
  7. Map遍历KeySet()和EntrySet/ Map.forEach的性能分析
  8. autocad字体ccfang,求CAD字体hzmsdi.shx 发到我邮箱,185955330@qq.com
  9. _beginthread, _beginthreadex
  10. qemu中vCPU对应的线程
  11. 站酷暂停更新怎么办?这18个免费设计资源网站值得收藏!
  12. db2导出适用于mysql的数据_db2数据库导出导入数据库
  13. 熊拍拍是什么?熊拍拍是下一个风口吗?
  14. python编译原理 书籍_如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥?...
  15. 深入理解IGP-ISIS——ISIS邻居建立过程,影响ISIS邻居建立因素,ISIS报文
  16. linux查看某个端口的流量_linux流量查看工具汇总
  17. 3_按钮开关控制的计算机串口通信
  18. python获取json中的某个值_json文件返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
  19. 面试必考之Java基础数据类型
  20. 最强大脑魏郭撕X,理科男与文科生的…

热门文章

  1. python123第五周作业答案_马哥2016全新Linux+Python高端运维班第五周作业
  2. 360怎么看电脑配置_电脑速度慢怎么办?教你电脑速度慢的原因与解决方法
  3. lstrip在python中是什么意思_什么是一目均衡图?如何利用一目均衡图来做交易?...
  4. java 程序执行后 强制gc_【GC系列】JVM的常用GC参数及GC日志解析
  5. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)
  6. 奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用
  7. oracle语句求保有率,Oracle之保有量计算(当前记录等于前几条记录之和)
  8. SQL语句(DQL)
  9. *PAT_B_1005_Java(25分)
  10. 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?