变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

軟件首頁(yè) |  文章首頁(yè)
最新更新 軟件分類 設(shè)為首頁(yè) 加入收藏 聯(lián)系我們
當(dāng)前位置:首頁(yè)文章首頁(yè) IT學(xué)院 Java

通過(guò)JNI實(shí)現(xiàn)Java和C++的相互調(diào)用

作者:東坡下載  來(lái)源:  發(fā)布時(shí)間:2010-10-14 11:43:29  點(diǎn)擊:

一、從Java調(diào)用C++的DLL

  1. 創(chuàng)建Java文件

  創(chuàng)建名為T(mén)estNative的Java文件,注意包名。

  package org.druze.test;

  publicclass TestNative {

  publicnativevoid sayHello();

  publicvoid sayHello2(){

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

  }

  }

  如代碼所示,對(duì)于sayHello方法聲明為native,這一部分將由C++的動(dòng)態(tài)庫(kù)來(lái)實(shí)現(xiàn)。

  2. 生成class文件

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

  注意:執(zhí)行該命令在org所在目錄執(zhí)行。

  3. 使用javah命令生成相應(yīng)的C++頭文件

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

  org_druze_test_TestNative.h的頭文件

  注意:執(zhí)行該命令在org所在目錄執(zhí)行。

  該頭文件的內(nèi)容如下:

  /* 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. 創(chuàng)建C++解決方案

  此處以VS2008為例。

  新建一個(gè)VC++的Win32項(xiàng)目,選擇如圖所示的控制臺(tái)應(yīng)用程序。項(xiàng)目名稱為NativeCode。

  點(diǎn)擊確定后,再點(diǎn)擊下一步,出現(xiàn)該頁(yè)面,應(yīng)用程序類型選擇DLL,附加選項(xiàng)選擇DLL

  5. 創(chuàng)建號(hào)工程之后,將org_druze_test_TestNative.h導(dǎo)入到工程里面,并創(chuàng)建名為source.cpp的源代碼,內(nèi)容如下:

  #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. 在工具->選項(xiàng)->項(xiàng)目和解決方案->VC++目錄菜單中,平臺(tái)選擇Win32,選擇"顯示以下內(nèi)容的目錄"為"包含文件",導(dǎo)入jni.h和jni_md.h的路徑。

  7. 編譯,生成NativeCode.dll,并將其copy到環(huán)境變量PATH的路徑下。

  8. 修改TestNative.java

  package org.druze.test;

  publicclass TestNative {

  publicnativevoid sayHello();

  publicstaticvoid main(String[] args) {

  // 加載動(dòng)態(tài)連接庫(kù)DLL,如果沒(méi)有找到的話,則會(huì)在運(yùn)行時(shí)報(bào)錯(cuò)

  System.loadLibrary("NativeCode");

  TestNative tnt = new TestNative();

  tnt.sayHello();

  }

  publicvoid sayHello2(){

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

  }

  }

  運(yùn)行,顯示"Hello World!"

  9. 注意頭文件jni.h和jni_md.h可以直接導(dǎo)入到工程中也可以。

  10.注意NativeCode.dll必須放置在java命令能訪問(wèn)的路徑中。

  二、從C++調(diào)用Java

  1.創(chuàng)建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中創(chuàng)建win32控制臺(tái)的應(yīng)用程序,命名為NativeCode2,在向?qū)е羞x擇空項(xiàng)目。

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

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

  5.創(chuàng)建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

文章評(píng)論

欄目導(dǎo)航

本類推薦文章

關(guān)于本站 | 網(wǎng)站幫助 | 廣告合作 | 下載聲明 | 友情連接 | 網(wǎng)站地圖
Copyright © 20098-2010 uzzf下載站. All Rights Reserved .
主站蜘蛛池模板: 国产小视频在线观看免费 | 日本无翼乌全彩无遮挡动漫 | 色视频免费版高清在线观看 | 免费视频久久久 | 我要看黄色片 | 一级毛片毛片毛片毛毛片 | 999久久久免费精品国产牛牛 | 日韩中文字幕精品视频在线 | 欧美成人免费观看国产 | 有哪些免费的毛片可以看 | nu77亚洲综合日韩精品 | 乱色欧美videos黑人 | 黄色视屏在线免费观看 | 亚洲制服丝袜在线观看 | 黄色成人在线网站 | 99久久综合 | 成年免费在线观看 | 偷拍第一页 | 日韩精品一区二区三区高清 | 精品午夜国产在线观看不卡 | www.色香蕉| 亚洲一区二区三区四 | 日本欧美一区二区三区高清 | 国产成人成人一区二区 | 天天爽天天爽 | 欧美日韩亚洲第一页 | 狠狠狠狠狠狠狠 | 国产第一亚洲 | 国产精品黄在线观看免费网站 | 国产h在线播放 | 成人精品一区二区三区中文字幕 | 天天综合色天天综合网 | 婷婷狠狠 | 欧美成人a级在线视频 | 国产精品一区在线免费观看 | 偷偷狠狠的日日高清完整视频 | www.av欧美| 一区二区三区精品国产欧美 | 在线成h人视频网站免费观看 | 欧美人成在线视频 | a性视频 |