在学习编程的过程中,
我觉得不止要获得课本的知识,
更多的是通过学习技术知识提高解决问题的能力,
这样我们才能走在最前方,
更
多
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
的方法显示同样会是