黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

簡(jiǎn)單JNI實(shí)現(xiàn)程序

系統(tǒng) 2686 0

?

簡(jiǎn)單JNI實(shí)現(xiàn)程序


簡(jiǎn)單JNI實(shí)現(xiàn)程序
圖來(lái)自百度百科 詞條: JNI

內(nèi)容相關(guān)知識(shí)來(lái)源于網(wǎng)絡(luò)?

?

1. 編寫(xiě)Java類(lèi)代碼(JNITest.java)

?

    // A simple JNI program.
// author: jarg
// http://jarg.iteye.com/

public class JNITest
{
	private native int max(int[] elements);	// declare the function: max.
	public static void main(String[] args)
	{
		int[] elements = {2,3,11,5,8,1,5,24,11,32};
		System.loadLibrary("Maxdll");	// load the function in dll.

		// output the max one in array elements.
		System.out.println("The max one of elements: " + new JNITest().max(elements));
	}
}

  

?

?該Java程序用來(lái)測(cè)試,調(diào)用本地函數(shù)即動(dòng)態(tài)鏈接庫(kù)(Maxdll.dll)中的函數(shù).

private native int max(int[] elements);聲明本地函數(shù).

System.loadLibrary("Maxdll");用于加載動(dòng)態(tài)鏈接庫(kù)

new JNITest().max(elements);向本地函數(shù)傳入一個(gè)整型數(shù)組,執(zhí)行本地函數(shù)max求數(shù)組中最大值的操作.

?

?

2. 編譯成字節(jié)代碼(JNITest.class)

編譯JNITest.java,生成相應(yīng)的.class文件.

?

?

3. 產(chǎn)生C頭文件(JNITest.h)

命令中輸入javah JNITest生成JNITest.h的頭文件.

JNITest.h

?

    /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JNITest */

#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JNITest
 * Method:    max
 * Signature: ([I)I
 */
JNIEXPORT jint JNICALL Java_JNITest_max
  (JNIEnv *, jobject, jintArray);

#ifdef __cplusplus
}
#endif
#endif

  

?

?頭文件jni.h位于:jdk安裝目錄\include.

另外,jni.h包含的jni_md.h位于:jdk安裝目錄\include\win32.

?

函數(shù)max(int elements)以 JNIEXPORT jint JNICALL Java_JNITest_max(JNIEnv *, jobject, jintArray);的形式在JNITest.h頭文件中被聲明,然后在JNITest.cpp程序被實(shí)現(xiàn).

JNIEXPORT?說(shuō)明該函數(shù)是一個(gè)被外部程序調(diào)用的函數(shù).

jint對(duì)應(yīng)于Java語(yǔ)言中int型,C語(yǔ)言中的long(因?yàn)閖ava中int型是32位,等長(zhǎng)于C中l(wèi)ong型)做為返回函數(shù)類(lèi)型.

?

JNICALL(__stdcall)是函數(shù)調(diào)用約定的一種,表示

  1.參數(shù)從右向左壓入堆棧

  2.函數(shù)被調(diào)用者修改堆棧

  3.函數(shù)名(在編譯器這個(gè)層次)自動(dòng)加前導(dǎo)的下劃線,后面緊跟一個(gè)@符號(hào),其后緊跟著參數(shù)的尺寸

函數(shù)名Java_JNITest_max: 外部調(diào)用語(yǔ)言為Java,類(lèi)名為JNITest,函數(shù)名為max.

命名規(guī)則是: Java_類(lèi)名_方法名.

特別的,當(dāng)類(lèi)在一個(gè)類(lèi)包(例如,com.jarg)中時(shí),點(diǎn)號(hào)用下劃線代替,即為Java_com_jarg_JNITest_max.

函數(shù)參數(shù): JNIEnv *, jobject, jintArray 其中,JNIEnv是在jni.h中定義的JNI環(huán)境,jintArray是傳入?yún)?shù)elements對(duì)應(yīng)的類(lèi)型.(jobject不太清楚 )

?

?

4. 編寫(xiě)JNI實(shí)現(xiàn)代碼(Maxdll.cpp)

VC++ 6.0 新建->工程->Win32 Dynamic-Link Library 工程命名為Maxdll

添加一個(gè)Maxdll.cpp文件到工程.

?

    // the implement of max.
// author: jarg
// http://jarg.iteye.com/

#include "JNITest.h"
#include "stdio.h"

JNIEXPORT jint JNICALL Java_JNITest_max(JNIEnv *env, jobject obj, jintArray elements)
{
	int max;
	jint *result = env->GetIntArrayElements(elements,false);
	if (result == NULL)
	{
		return 0;
	}
	for (int i=0; i<env->GetArrayLength(elements); i++)
	{
		if(i == 0)
			max = result[0];
		if(result[i] > max)
			max = result[i];
	}
	return max;


  

?

?

5. 編譯成鏈接庫(kù)文件(Maxdll.dll)

?

這是max函數(shù)對(duì)應(yīng)的實(shí)現(xiàn),經(jīng)編譯,連接后在工作空間\Debug中生成Maxdll.dll.

將其拷貝到.class文件目錄下.

?

6. 運(yùn)行Java程序(JNITest.java)

運(yùn)行Java程序(java JNITest),得到調(diào)用本地函數(shù)max后的結(jié)果:

The max one of elements: 32

?

這類(lèi)知識(shí)網(wǎng)上很多.

推薦鏈接:? http://hi.baidu.com/leona_leon/blog/item/79f0090c71e022386059f388.html

http://hi.baidu.com/madrigar/blog/item/2635622755cfa504918f9d29.html

http://hi.baidu.com/madrigar/blog/item/10175d60936b0cd88db10d95.html

http://hi.baidu.com/madrigar/blog/item/cc7f242d89ef7a33349bf797.html

http://hi.baidu.com/madrigar/blog/item/4502b999895d160f6e068cee.html

?

簡(jiǎn)單JNI實(shí)現(xiàn)程序


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論