通过JNI实现Java和C++的相互调用

来源:java认证发布时间:2012-11-12 13:12:32java认证视频

  一、从Java调用C++的DLL

  1.    创建Java文件

  创建名为TestNative的Java文件,注意包名。

  package org.druze.test;

  publicclass TestNative {

  publicnativevoid sayHello();

  publicvoid sayHello2(){

  System.out.println("Say Hello From Java");

  }

  }

  如代码所示,对于sayHello方法声明为native,这一部分将由C++的动态库来实现。

  2.    生成class文件

  使用javac org/druze/test/TestNative.java生成class文件

  注意:执行该命令在org所在目录执行。

  3.    使用javah命令生成相应的C++头文件

  使用javah org.druze.test.TestNative生成名为

  org_druze_test_TestNative.h的头文件

  注意:执行该命令在org所在目录执行。

  该头文件的内容如下:

  /* DO NOT EDIT THIS FILE - it is machine generated */

  #include

  /* Header for class org_druze_test_TestNative */

  #ifndef _Included_org_druze_test_TestNative

  #define _Included_org_druze_test_TestNative

  #ifdef __cplusplus

  extern "C" {

  #endif

  /*

  * Class:     org_druze_test_TestNative

  * Method:    sayHello

  * Signature: ()V

  */

  JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello

  (JNIEnv *, jobject);

  #ifdef __cplusplus

  }

  #endif

  #endif

  4.    创建C++解决方案

  此处以VS2008为例。

  新建一个VC++的Win32项目,选择如图所示的控制台应用程序。项目名称为NativeCode。

  点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL,附加选项选择DLL

  5.    创建号工程之后,将org_druze_test_TestNative.h导入到工程里面,并创建名为source.cpp的源代码,内容如下:

  #include"org_druze_test_TestNative.h"

  #include

  using namespace std;

  JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello(JNIEnv *env, jobject obj)

  {

  cout<<"Hello World!"<

  }

  6.    在工具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。

  7.    编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。

  8.    修改TestNative.java

  package org.druze.test;

  publicclass TestNative {

  publicnativevoid sayHello();

  publicstaticvoid main(String[] args) {

  // 加载动态连接库DLL,如果没有找到的话,则会在运行时报错

  System.loadLibrary("NativeCode");

  TestNative tnt = new TestNative();

  tnt.sayHello();

  }

  publicvoid sayHello2(){

  System.out.println("Say Hello From Java");

  }

  }

  运行,显示“Hello World!”

  9.    注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。

  10.注意NativeCode.dll必须放置在java命令能访问的路径中。

  二、从C++调用Java

  1.创建TestNative2.Java

  package org.druze.test;

  publicclass TestNative2 {

  publicstaticvoid testPrint(){

  System.out.println("this is from static method");

  }

  publicstaticint testReturn(){

  return 22;

  }

  publicstaticint testInput(int number){

  return 22+number;

  }

  publicint testInstance(int number){

  System.out.println("this is from instance method");

  return 11+number;

  }

  }

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答