JNI學習二:字串參數傳遞與傳回值

來源:互聯網
上載者:User

轉載請註明出處!

原文地址連結:http://blog.csdn.net/zgyulongfei/article/details/7409441


在編程的時候我們不僅需要使用無參的函數,有參數的函數也是必須的。

這次我編寫一個函數用來傳遞String型別參數,並輸出該函數的傳回值。

編寫java類:

class StringFunction{private native String getWords(String hint);static{System.loadLibrary("StringFunction");}public static void main(String [] args){StringFunction sf = new StringFunction();String hint = "say something: ";String words = sf.getWords(hint);System.out.println("Get the words: " + words);}}

在命令列介面下,輸入命令編譯:javac  StringFunction.java

產生.class之後,繼續輸入命令:javah  –jni  StringFunction

接著就產生了StringFunction.h之後,然後開始編寫c檔案StringFunction.c了。

C代碼如下:

#include <jni.h>#include "StringFunction.h"JNIEXPORT jstring JNICALL Java_StringFunction_getWords(JNIEnv *env, jobject obj, jstring hint){char buf[128];const char *str = (*env)->GetStringUTFChars(env, hint, NULL);//注釋1if(str == NULL){//注釋2return NULL;}printf("%s", str);(*env)->ReleaseStringUTFChars(env, hint, str);//注釋3scanf("%s", buf);return (*env)->NewStringUTF(env, buf);//注釋4}

代碼寫好後,將StringFunction.c 編譯成DLL動態連結程式庫(不懂編譯?看這裡)。

運行程式,結果如下:


分析:

注釋1:由於不能將jstring類型直接轉換為c語言的char*類型,所以通過GetStringUTFChars進行操作。GetStringUTFChars方法可以獲得到以UTF-8格式的字串的指標。

const jchar *GetStringChars(JNIEnv*env, jstring str, jboolean *isCopy);

當isCopy為JNI_TRUE時,表示返回源字串的一個副本;當其為JNI_FALSE表示直接返回源字串的指標;通常為NULL,因為我們不關心返回的是一個執行個體還是一個指向源字串的指標。

注釋2:由於java虛擬機器分配記憶體空間可能會失敗,所以這裡得進行一次判斷。

注釋3:用了GetStringChars得記得調用ReleaseStringUTFChars方法釋放記憶體,如果不釋放的話,可能導致記憶體泄露。

注釋4:將UTF-8的字元序列buf轉換成String類型

-------------------------------------------------

要下載本文源碼,請點擊這裡!


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.