C++调用Java类.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C调用Java类

C++调用Java类 JNI之C++调用Java类 ——java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思。于是开始编写一段使用VC++在Windows系统里调用java的String类,在C++里调用String类内的一些方法。 JNI已经被开发了很多年,而在我2年多的Java编程时间里从来没有接触过。直到最近研究JVM实现原理才注意到JNI。 JNI既Java Native Interface,Native这个词我见过我认为最恰当的翻译就是原生。原生的意思就是来自系统自己的,原汁原味的东西,例如Win32 API。Java类需要在虚拟机上运行,也就不是原生的,同样.NET Framework也不是原生的。JNI也就是Java原生接口。关于JNI的规范,以及为什么要使用它,它能做些什么,都在/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html里记述着。 JNI是规范,它规定了虚拟机的接口,而把具体的实现留给开发者。 JVM的实现不是唯一的,目前存在很多种Java虚拟机,Sun Hotspot,IBM JDK,还有HP的,Kaffe等等。最流行的就是Sun的Hotspot,最复杂的就是IBM JDK,这是IBM的一贯作风。本文不讨论JVM的实现,只关注JNI。如果您安装了Sun的JDK,您就能在[JAVA_HOME]\include目录下找到jni.h。这个头文件就是虚拟机的唯一接口,你可以调用它声明的函数创建一个JVM。 在说明C++调用Java类之前,我想先演示一下如果编写Java Native Method。 1.编写带有Native方法的Java类 package org.colimas.jni.test; ? public class JniTest { ? static { System.loadLibrary(JniTestImpl); } //JVM调用JniTestImpl.dll public JniTest(){ } //原生方法 public native void print(String str); /** * @param args */ public static void main(String[] args) { JniTest test=new JniTest(); test.print(hello JVM); //调用原生方法 } } 2.使用javah生成c语言头文件。 javah -jni org.colimas.jni.test.JniTest 目录里多了一个org_colimas_jni_test_JniTest.h文件,打开文件,内容如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include jni.h /* Header for class org_colimas_jni_test_JniTest */ ? #ifndef _Included_org_colimas_jni_test_JniTest #define _Included_org_colimas_jni_test_JniTest #ifdef __cplusplus extern C { #endif /* * Class: org_colimas_jni_test_JniTest * Method: print * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print (JNIEnv *, jobject, jstring); ? #ifdef __cplusplus } #endif #endif ? 其中的Java_org_colimas_jni_test_JniTest_print就是JniTest类里面的print原生方法的C语言声明。 3.编写C代码实现原生方法print #include jni.h #include org_colimas_jni_test_JniTest.h //javah生成的头文件 #include stdio.h ? JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print (JNIEnv *env, jobject object,jstring str) { //获得字符串 const ch

文档评论(0)

sunhao111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档