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

歡迎訪問 生活随笔!

生活随笔

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

java

Java JNI浅析(一)

發(fā)布時(shí)間:2023/12/31 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java JNI浅析(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JNI是Java Native Interface的 縮寫。從Java 1.1開始,Java Native Interface (JNI)標(biāo)準(zhǔn)成為java平臺(tái)的一部分,它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計(jì) 的,但是它并不妨礙你使用其他語言,只要調(diào)用約定受支持就可以了。
??? 使用java與本地已編譯的代碼交互,通常會(huì)喪失平臺(tái)可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。JNI標(biāo)準(zhǔn)至少保證本地代碼能工作在任何Java 虛擬機(jī)實(shí)現(xiàn)下。
??? JNI(Java Native Interface)的書寫步驟
  • 編寫帶有native聲明的方法的java類
  • 使用javac命令編譯所編寫的java類
  • 使用javah? jni java類名生成擴(kuò)展名為h的頭文件???
  • 使用C/C++實(shí)現(xiàn)本地方法???
  • 將C/C++編寫的文件生成動(dòng)態(tài)連接庫
編寫java程序 這里以O(shè)ne world為例
public class StringDLL{
??? static
??? {
??? System.loadLibrary("testStringJNI");
??? }
??? public native static String get();
??? public native static void set(String name);
??? public static void main(String[] args){
??? ??? StringDLL s = new StringDLL();
??? ??? s.set("Hello world");
??? ??? System.out.println(s.get());
??? }
}
如果是靜態(tài)類型方法則生成的頭文件中方法的第二個(gè)參數(shù)是對(duì)java類的引用(JNIEnv *, jclass),如不是靜態(tài)類型則是對(duì)對(duì)象的引用(JNIEnv *, jobject)
使用javah 生成擴(kuò)展名為h的頭文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class StringDLL */

#ifndef _Included_StringDLL
#define _Included_StringDLL
#ifdef __cplusplus
extern "C" {
#endif
/*
?* Class:???? StringDLL
?* Method:??? get
?* Signature: ()Ljava/lang/String;
?*/
JNIEXPORT jstring JNICALL Java_StringDLL_get
? (JNIEnv *, jclass);

/*
?* Class:???? StringDLL
?* Method:??? set
?* Signature: (Ljava/lang/String;)V
?*/
JNIEXPORT void JNICALL Java_StringDLL_set
? (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif
使用C實(shí)現(xiàn)本地方法
#include "stdafx.h"
#include "testStringJNI.h"
#include <stdlib.h>
const char * chs;
jstring s;
JNIEXPORT jstring JNICALL Java_StringDLL_get(JNIEnv *env, jclass cls)
{??? ???
??? /* 簡(jiǎn)單返回轉(zhuǎn)換const char為jstring */
??? return (*env)->NewStringUTF(env,chs);
}
JNIEXPORT void JNICALL Java_StringDLL_set(JNIEnv *env, jclass cls, jstring s)
{
??? chs = (*env)->GetStringUTFChars(env,s,0); //java與C類型不同,需用JNI方法進(jìn)行轉(zhuǎn)換
}
注意,我們總是用接口指針 env 來操作 Java 對(duì)象。
使用C++實(shí)現(xiàn)本地方法
#include "stdafx.h"

#include "testStringJNI.h"
#include <stdlib.h>
const char * chs;
jstring s;
JNIEXPORT jstring JNICALL Java_StringDLL_get(JNIEnv *env, jclass cls)
{??? ???
??? /* 簡(jiǎn)單返回轉(zhuǎn)換const char為jstring */
??? return env->NewStringUTF(chs);
}
JNIEXPORT void JNICALL Java_StringDLL_set(JNIEnv *env, jclass cls, jstring s)
{
??? chs = env->GetStringUTFChars(s,0); //java與C類型不同,需用JNI方法進(jìn)行轉(zhuǎn)換
}
使用 C++ 后,源代碼變得更為直接,且接口指針參數(shù)消失。但是,C++ 的內(nèi)在
機(jī)制與 C 的完全一樣。在 C++ 中,JNI 函數(shù)被定義為內(nèi)聯(lián)成員函數(shù),它們將擴(kuò)
展為相應(yīng)的 C 對(duì)應(yīng)函數(shù)。
生成DLL文件
在.NET下新建Win32 Project工程名字為“testStringJNI”
在Application Setting里Aplication type點(diǎn)選DLL
拷貝頭文件到工程中
書寫C++程序?qū)崿F(xiàn)頭文件中定義的方法(見上頁)
按F7或Build -> Build? Solution
我們生成DLL文件就放在工程目錄下Debug文件夾里。名字就是 工程名.DLL
拷貝DLL到j(luò)ava文件目錄下,運(yùn)行java就可以看到控制臺(tái)打印出“One world”
一個(gè)簡(jiǎn)單java通過JNI調(diào)用C、C++就完成了

轉(zhuǎn)載于:https://blog.51cto.com/39387/78069

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Java JNI浅析(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品精品精品 | 无码人妻精品一区二区50 | 午夜激情福利在线 | 日日操狠狠干 | 一区二区乱子伦在线播放 | 日本少妇与黑人 | 国产精品久久久久久福利 | 国产又爽又黄视频 | 国产免费不卡视频 | 国产精品VideoSex性欧美 | 人妻丰满熟妇av无码久久洗澡 | 精品午夜一区二区三区 | 青青青手机视频 | 国产精品污视频 | 成人日韩精品 | 国产影音先锋 | 亚洲乱码视频在线观看 | 农村妇女愉情三级 | 欧洲高潮三级做爰 | √资源天堂中文在线视频 | 精品国产一二三 | 日本a在线播放 | 国产精品视频一区二区三区 | 久久久一区二区三区四区 | 白石茉莉奈中文字幕在 | 中文字幕日韩精品亚洲一区小树林 | 熟妇高潮一区二区三区在线播放 | 呦呦网 | 久久777| 欧美成人区 | 精品国产91久久久久久久妲己 | 91在线高清视频 | 黄色av免费在线 | 国内精品国产成人国产三级 | 日本国产在线播放 | 午夜丰满寂寞少妇精品 | 成年人免费观看网站 | 亚洲1234区| 在线免费观看黄网站 | 久久亚洲免费 | 色婷婷在线观看视频 | 都市激情中文字幕 | 97自拍偷拍视频 | 日韩精品免费在线视频 | 国产精品无码一区二区三 | 午夜三级av| aaaaa级片| 亚洲性图一区二区三区 | 国产乱码精品 | 日韩xxx高潮hd | av伊人久久 | 日韩视频免费 | 久久久久亚洲AV成人网人人小说 | 欧美成人乱码一二三四区免费 | 三浦理惠子av在线播放 | 国产欧美久久久 | 久久久久久久香蕉 | 天天天色综合 | 国产精品露脸视频 | 日本妈妈9| 亚洲射吧 | 日韩欧美在线观看免费 | 亚洲不卡中文字幕无码 | 免费观看在线播放 | 人妖av在线 | 国产福利不卡视频 | 久久99精品久久久久久园产越南 | 久久精国产 | 欧美激情国产精品 | 国产一区二区网 | jizz性欧美2 视频在线日韩 | 一本久道久久综合 | 亚洲天堂三区 | 台湾佬美性中文娱乐 | 久草免费福利 | 成人小视频在线播放 | 国产精美视频 | 国产伦精品一区二区三区视频免费 | 国产精品区一区二 | 久热色 | 大肉大捧一进一出好爽动态图 | 国产精品免费久久 | 成人av免费在线看 | 91污片| 国产com| 中文精品一区二区三区 | 天天舔天天干天天操 | 亚洲成人网在线 | 少妇av片 | 欧美熟妇久久久久 | 日韩三级av| 99蜜桃臀久久久欧美精品网站 | 成人动漫在线观看免费 | 在线一本 | 美女丝袜av| 99热最新| 91精品国产综合久久国产大片 | 老外一级片 | 色综合一区二区三区 |