日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

JAVA调用c/c++代码

發(fā)布時間:2025/4/14 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA调用c/c++代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  JNI是Java Native Interface的縮寫,中文為JAVA本地調(diào)用。使用JNI可以很方便的用我們的Java程序調(diào)用C/C++程序。很多時候,某些功能用Java無法實(shí)現(xiàn),比如說涉及到底層驅(qū)動的一些功能,這時候我們就可以利用JNI來調(diào)用C或者C++程序來實(shí)現(xiàn),這就是JNI的強(qiáng)大之處。但是JNI也有它的缺點(diǎn),使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。

  下面是一個JNI例子,調(diào)用C++輸出"hello world":

?

第一步:創(chuàng)建Java類,在里面定義一個本地方法(用native關(guān)鍵字修飾的方法)

  public native void sayHello();

第二步:使用javah命令(javah? 類的全路徑)生成本地方法的C++頭文件

  在DOS窗口中進(jìn)入工程所在目錄,然后執(zhí)行javah com.test.TestNative命令,執(zhí)行完之后就會在當(dāng)前目錄生成一個后綴名為.h的頭文件,如com_test_TestNative.h,這個頭文件是根據(jù)包名和類名來命名的。

1 /* DO NOT EDIT THIS FILE - it is machine generated */2 #include <jni.h>3 /* Header for class com_test_TestNative */4 5 #ifndef _Included_com_test_TestNative6 #define _Included_com_test_TestNative7 #ifdef __cplusplus8 extern "C" {9 #endif 10 /* 11 * Class: com_test_TestNative 12 * Method: sayHello 13 * Signature: ()V 14 */ 15 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello 16 (JNIEnv *, jobject); 17 18 #ifdef __cplusplus 19 } 20 #endif 21 #endif

  15、16行是對TestNative類中的本地方法sayHello()的聲明。這個h文件相當(dāng)于我們在java里面的接口,這里聲明了一個 Java_com_test_TestNative_sayHello (JNIEnv *, jobject);方法,然后在我們的本地方法里面實(shí)現(xiàn)這個方法,也就是說我們在編寫C/C++程序的時候所使用的方法名必須和這里的一致。

第三步:編寫C/C++本地代碼,生成動態(tài)鏈接庫文件

  首先在VC6.0(當(dāng)然也可以用其他工具)中創(chuàng)建一個dll工程---Win32 Dynamic-Link Library工程。然后將上面生成的頭文件com_test_TestNative.h添加到該工程中,然后創(chuàng)建一個源文件引用該頭文件并且實(shí)現(xiàn)頭文件中本地函數(shù)的功能:

1 #include<iostream.h> 2 #include"com_test_TestNative.h" 3 4 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj) 5 { 6 cout<<"hello world!"<<endl; 7 }

?

  這里因?yàn)閏om_test_TestNative.h中引入了jni.h所以要將jni.h加入到VC6.0安裝目錄下的Include目錄中。jni.h在JDK安裝目錄下的include中,同時得件include/win32中的兩個頭文件jawt_md.h、jni_md.h也導(dǎo)入到VC6.0中。

  將所依賴的頭文件導(dǎo)入之后,我們就可以構(gòu)建該工程了,按F7就行了,完了會在工程目錄中的Degug目錄下生成一個動態(tài)鏈接庫文件,我這里生成的是NativeCode.dll。我們就可以將該dll文件拷貝到環(huán)境變量path所包含的目錄下給咱們的Java程序調(diào)用了,為了方便,我們也可以將dll所在的工程目錄加入到環(huán)境變量path中去,這樣可以避免每次都要拷貝的麻煩。注意修改環(huán)境變量之后要重啟myeclipse。

?

第四步:Java調(diào)用本地函數(shù)

1 package com.test;2 3 public class TestNative {4 public native void sayHello();5 6 /**7 * @param args8 */9 public static void main(String[] args) { 10 System.loadLibrary("NativeCode"); 11 TestNative tNative = new TestNative(); 12 tNative.sayHello(); 13 } 14 }

  第10行是加載動態(tài)鏈接庫,JVM只需要加載一次就可以調(diào)用了,“NativeCode”是上面生成的動態(tài)鏈接庫的名字,不含后綴名。

  運(yùn)行該程序,成功打印輸出了"hello world"。

?

我喜歡,駕馭著代碼在風(fēng)馳電掣中創(chuàng)造完美!我喜歡,操縱著代碼在隨必所欲中體驗(yàn)生活!我喜歡,書寫著代碼在時代浪潮中完成經(jīng)典!每一段新的代碼在我手中誕生對我來說就象觀看剎那花開的感動!

?

轉(zhuǎn)載于:https://www.cnblogs.com/senior-engineer/p/4969599.html

總結(jié)

以上是生活随笔為你收集整理的JAVA调用c/c++代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。