免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
軟件首頁 |  文章首頁
最新更新 軟件分類 設為首頁 加入收藏 聯系我們
當前位置:首頁文章首頁 IT學院 Java

通過JNI實現Java和C++的相互調用

作者:東坡下載  來源:  發布時間:2010-10-14 11:43:29  點擊:

一、從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;

  }

  2.在VS2008中創建win32控制臺的應用程序,命名為NativeCode2,在向導中選擇空項目。

  3. 在工具->選項->項目和解決方案->VC++目錄菜單中,平臺選擇Win32,選擇"顯示以下內容的目錄"為"包含文件",導入jni.h和jni_md.h的路徑。或直接把jni.h和jni_md.h導入到工程中。

  4. 在工具->選項->項目和解決方案->VC++目錄菜單中,平臺選擇Win32,選擇"顯示以下內容的目錄"為"包含文件",導入jvm.lib的路徑,并在項目->NativeCode2屬性->配置屬性->鏈接器->命令行中添加jvm.lib(這一步或者使用#pragma comment(lib,"jvm.lib")來代替)。或者將直接將jvm.lib添加到工程中。

  5.創建Test.cpp

  #include

  #include

  using namespace std;

  int main()

  {

  JavaVMOption options[1];

  JNIEnv * env;

  JavaVM * jvm;

  JavaVMInitArgs vm_args;

  options[0].optionString = "-Djava.class.path=.";

  vm_args.version = JNI_VERSION_1_6;

  vm_args.nOptions = 1;

  vm_args.options = options;

  vm_args.ignoreUnrecognized = JNI_TRUE;

  long status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

  if (status == JNI_ERR)

  {

  cout<<"Can not create JVM"<

  return -1;

  }

  printf("Created JVM"n");

  jclass cls = env->FindClass("org/druze/test/TestNative2");

  printf("getCls"n");

  cout<

  if (cls !=0)

  {

  jmethodID mid = env->GetStaticMethodID(cls, "testReturn", "()I");

  printf("getMid"n");

  if (mid !=0)

  {

  printf("testReturn"n");

  int result=env->CallStaticIntMethod(cls, mid);

  printf("call over result=%d"n",result);

  }

  mid = env->GetStaticMethodID(cls, "testPrint", "()V");

  if (mid !=0)

  {

  printf("testPrint"n");

  env->CallStaticVoidMethod(cls, mid);

  }

  mid = env->GetStaticMethodID(cls, "testInput", "(I)I");

  if (mid !=0)

Tags:

JNIC++Java

文章評論

本類推薦文章

關于本站 | 網站幫助 | 廣告合作 | 下載聲明 | 友情連接 | 網站地圖
Copyright © 20098-2010 uzzf下載站. All Rights Reserved .
免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
主站蜘蛛池模板: 99久久精品费精品国产| 欧美乱码视频| 欧美粗大猛烈水多18p| 免费a级毛片无码av| 毛片免费全部播放一级| 国产日韩欧美91| 啊灬啊别停灬用力啊岳| 亚洲三级在线观看| 天仙tv在线视频一区二区| 九九精品国产99精品| 人与禽交videosgratisdo视频| 国产精品免费播放| 香港一级毛片免费看| 国产精品JIZZ在线观看无码| 久久婷婷人人澡人人爽人人爱| 天堂va视频一区二区| 欧美巨大另类极品videosbest| 亚洲欧美日韩综合一区| 亚洲三级在线观看| 国产女人乱子对白AV片| 亚洲麻豆精品果冻传媒| 欧美精品一区二区精品久久| 亚洲午夜一区| a级毛片在线观看| 国产一区二区精品久久| 人妻少妇无码精品视频区| 国产乱子伦在线观看| 欧美综合人人做人人爱| 日韩人妻精品一区二区三区视频| 国产成人啪精品| 四虎影院免费视频| 国产午夜影视大全免费观看| 精品人妻大屁股白浆无码| 三级网站免费| 腿交hd| 引诱亲女乱小说完整版18| 老司机美女一级毛片| 午夜在线观看视频免费成人| 国产av一区二区精品久久凹凸| 日韩欧美三级在线观看| 两个人日本免费完整版在线观看1|