freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

javajni調(diào)用的完全手冊-預(yù)覽頁

2024-12-05 15:10 上一頁面

下一頁面
 

【正文】 交互 .....................................................................................................80 使用 JNI 技術(shù)實現(xiàn) JAVA 程序調(diào)用 dll.......................................................................................82 HPUX 下使用 JNI 訪問標(biāo)準(zhǔn) C++程序 .......................................................................................89 Java:JNI 調(diào)用資料整理 WSY 2020115 更新 JNI 調(diào)用的注意事項 JNI 的簡單教程網(wǎng)上很多,看看就能夠明白, 照著操作也基本能夠做下來。 解決方法:在 jdk 中尋找到 和 文件,將這兩個文件拷貝到 C 語言編譯器的 include 目錄中。 解決方法:不能簡單的把生成的 .h 文件中的方法名直接拷貝到 .c 文件中去,需要加入具體的參數(shù)。試試將 dll 文件放在與 class 文件同一目錄,再試試放在 package 的根目錄。 編譯說明: javac d ./ d ./ 參數(shù)會在當(dāng)前目錄下,依次建立 package 指定的目錄,并把 放在package 。 } } } Java:JNI 調(diào)用資料整理 WSY 2020115 更新 package 指定 路徑下,為下一步的 javah 做準(zhǔn)備。一般提供給 java 的jni接口包括一個 so 文件(封裝了 c 函數(shù)的實現(xiàn))和一個 java 文件(需要調(diào)用 path 的類)。 } public static void main(String args[]) { weiqiong haha = new weiqiong()。 Java:JNI 調(diào)用資料整理 WSY 2020115 更新 4.創(chuàng)建文件 將上面那個函數(shù)實現(xiàn),內(nèi)容如下: include include JNIEXPORT void JNICALL Java_weiqiong_testjni (JNIEnv *env, jobject obj) { printf(hahago into c!!!n)。 7.執(zhí)行 java weiqiong,打印出結(jié)果:“ hahago into c!!!” 三. JNI 調(diào)用中考慮的問題 在首次使用 JNI 的時候有些疑問,后來在使用中一一解決,下面就是這些問題的備忘: 1。注意: test 使用完后,通知虛擬機平臺相關(guān)代碼無需再訪問: (*env)ReleaseStringUTFChars(env, jstring, test)。將 buffer 的值 copy 到 bytearray 中,函數(shù)直接 return bytearray 就可以了。 jfieldID fid。 cls = (*env)GetObjectClass(env, retobj)。 不知道占用多少空間的 buffer,如何傳遞出去呢? 在 jni的 c 文件中 new 出空間,傳遞出去。 五. JAVA調(diào)用本地接口后的數(shù)據(jù)處理問題 1. java 得到的數(shù)據(jù)是 String的話,直接處理就可以了。 String string = new String(byte1)。 return ()。 floatee = (floatstr)。 } //change the string type to the sqlDate type public static stringToDate(String dateStr) { return (dateStr)。 } } Java:JNI 調(diào)用資料整理 WSY 2020115 更新 then from C, we want to call the Java sayHello() method which returns a String : JNIEXPORT void JNICALL Java_JavaHowTo_sayHello (JNIEnv *env, jobject obj) { const char *str。)。 printf(%s , str)。 } } And finally, to use it public class JNIJavaHowTo { public static void main(String[] args) { JavaHowTo jht = new JavaHowTo()。 所以 C 代碼中必須要處理這些異常,要么將其拋出,要么忽略掉。 ExceptionOccurred():判斷一個異常是否已被丟棄,但尚未清除。 在所有這些函數(shù)中,最不能忽視的就是 ExceptionOccurred()和 ExceptionClear()。然而,必須確保異常最終被清除。 // deal with exception exc = (*env)ExceptionOccurred(env)。本文給出具體的源代碼,對源代碼進行了解釋, C 部分提供了 C 和 C++兩種方式實現(xiàn)的完整代碼。C:\\bin。 } private native String hypotenuse0(String send_buf,String recv_buf,int errno)。 ()。 String javasend=發(fā)送中文 chinese!。 ()。 jstring WindowsTojstring( JNIEnv* env, char* str )。 /*上句 recvtest 接收 Java 傳過來的中文字符串正確 ,如果改為下句 ,則出現(xiàn)亂碼 : const char * recvtest = (*env)GetStringUTFChars( env,recv_buf,0)。 recv_buf = WindowsTojstring(env ,Buf_Return)。 } char* jstringToWindows( JNIEnv *env, jstring jstr ) { int length = (*env)GetStringLength(env,jstr )。 size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL )。 return rtn。 if( slen == 0 ) rtn = (*env)NewStringUTF(env,str )。 } if( buffer ) free( buffer )。 cl Ic:\\include Ic:\\include\win32 LD 通過 Microsoft Visual C++將 C 源代碼生成 dll文件,供 java 調(diào)用。 Buf_Return = (char*)malloc(1024)。 sprintf(Buf_Return,接收中文 chinese!)。 */ return recv_buf。 int size = 0。 rtn[size] = 0。 unsigned short * buffer = 0。 if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) 0 ) rtn = (env)NewString( (jchar*)buffer, length )。如有錯誤之處,請與筆者聯(lián)系: 。 idx ++){ sayHello(args[idx])。設(shè)置 JVM 路徑 set path=%JAVA_HOME%\jre\bin\client。 JavaVMInitArgs vm_args。 jclass class_Chinese。 options[0].optionString = =.。 = 1。env, amp。 } class_Chinese = (*env).FindClass(Chinese)。 // Call main(String[]{ [中文 ]}) args = (*env).NewObjectArray(1, class_String, WindowsTojstring(env, [中文 ]))。 } // 修改自 dpwu39。 if( slen == 0 ) rtn = (*env).NewStringUTF(str )。 } if( buffer ) free( buffer )。琢磨了三天,大致搞懂了 JNI 的主體部分。解決 JAVA對本地操作的一種方法就是 JNI。 } 在這里,庫的擴展名字可以不用寫出來,究竟是 DLL 還是 SO,由系統(tǒng)自己判斷。 public native static int get()。 public native static void set(int i)。 } } 用 javac 編譯它,會生成 。再把庫文件拷貝到 JAVA程序的路徑下面,就可以用 JAVA調(diào)用 C/C++所實現(xiàn)的功能了。 ifdef __cplusplus } endif endif 在具體實現(xiàn)的時候,我們只關(guān)心兩個函數(shù)原型 JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)。函數(shù)的名 稱是 JAVA_再加上 java 程序的 package 路徑再加函數(shù)名組成的。 } JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) { i = j。 我的項目比較復(fù)雜,需要調(diào)用動態(tài)鏈接庫,這樣在 JNI 傳送參數(shù)到 C 程序時,需要對參數(shù)進行處理轉(zhuǎn)換。 } public native static int SmsInit()。(建議使用 Jbuilder 進行編譯,操作比較簡單!)這個頭文件就是 Java 和 C 之間的紐帶。 ifdef __cplusplus } endif endif 對于我要調(diào)用的 C程序的動態(tài)鏈接庫, C 程序也要提供一個頭文件, 。 /*read, unread*/ int type。 char number[32]。 DLLEXPORT int SmsSend(char *phonenum, char *content)。 DLLEXPORT int SmsGetInd(void)。 DLLEXPORT int SmsDelete(int storage, int index)。在網(wǎng)上的資料中,由于調(diào)用的方法實現(xiàn)的都比較簡單,(大多是打印字符串等)所以避開了 JNI 中最麻煩的部分,也是最關(guān)鍵的部分,參數(shù)的傳遞。 的程序如下: include include JNIEXPORT jint JNICALL Java__mobilesoft_sms_mobilesoftinfo_SendSMS_SmsInit(JNIEnv * env, jclass jobject) { return SmsInit()。 char * pMobileNo = (char *)arrayBody。 pSmscontent = (char *)arrayBody。這里要注意的是GetArrayLength, GetByteArrayElements 等這些 JNI 中已經(jīng)包含的方法,這些方法是專門對轉(zhuǎn)換參數(shù)類型而提供的。 String smscontentemp = 早上好 。 (smscontentdb, 0, smsc
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1