- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java和C混合编程
程序员新招:Java与C++混合编程(1)
2011-02-15 13:12 帮考网 HYPERLINK /java/ \t _blank 帮考网 HYPERLINK /art/201102/244558.htm \l commment#commment \t _self 我要评论(8) 字号: HYPERLINK javascript:setfont(12); \t _self T | HYPERLINK javascript:setfont(16); \t _self T
混合语言编程要注意的是编码传输,语言运行环境的因素。例如要在C++中构造Java的运行环境。混合语言编程有困难,但也很有趣,两种语言的优点都可以得到,不是很好的事情吗?
AD:
现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,这里为大家讲的,就是C++与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的方法显示同样会是乱码。
以上为%SRC%/Java-cpp/WinFile.cpp的部分代码,代码中实现了两个函数,一个是将UTF-8转为GB2312,另一个为将GB2312转为UTF-8,而jni.h这个头文件中也同时提供了jstring与char*的类型之间转换函数。
GetStringUTFChars
NewStringUTF
运行如下编译命令:
cl -GX -LD WinFile.cpp -FelibWinFile.dll
则生成libWinFile.dll这个动态库(注意,生成的名称要与System.loadLibrary这个函数内的参数的名称一致),运行这个Java的类。
则输出如下
?
程序员新招:Java与C++混合编程(2)
2011-02-15 13:12 帮考网 HYPERLINK /java/
您可能关注的文档
最近下载
- 如何进行销售管理.pptx VIP
- 影像艺术概述1课件.ppt VIP
- 大学生职业生涯规划.pdf VIP
- 有机硅公司星火科创研发中试车间项目环境影响评价报告书.pdf VIP
- GJB 438C-2021 军用软件开发文档通用要求 (高清,带章).docx VIP
- 东北三省四市教研联合体2025年高考模拟考试(一)地理试题(含答案).pdf VIP
- 建筑施工专业大纲、计划.doc VIP
- 短短芽孢杆菌JK22菌株对番茄枯萎病的抑菌作用及其小区防效.PDF VIP
- 明代文学现象研究:宗藩幕府与主流文坛的交锋.docx VIP
- 2025至2030年中国等静压石墨行业市场调查研究及投资策略研究报告.docx
原创力文档


文档评论(0)