一、c/c++語言: 1.關于動态連結庫的搜尋問題: LIBRARY_PATH is used by gcc before compilation to search for directories containing libraries that need to be linked to your program. LD_LIBRARY_PATH is used by your program to search for directories containing the libraries after it has been successfully compiled and linked. 二、java中的資料類型與c語言中的資料類型轉化問題 1.java中的long類型為8個位元組而c語言中的long類型為4個位元組,是以應當在java中使用int來對應c語言中的long或者unsigned long類型 下面給一個簡單示例:
1 JNIEXPORT jint JNICALL example
2 (JNIEnv * env, jclass obj, jstring address, jshort port,
3 jstring username, jstring password, jlong channel,
4 jintArray start_time, jintArray end_time, jstring path){
5
6 const char* addr = env->GetStringUTFChars(address, NULL);
7 const char* uname = env->GetStringUTFChars(username, NULL);
8 const char* pwd = env->GetStringUTFChars(password, NULL);
9 char* p = (char*)env->GetStringUTFChars(path, NULL);
10 jint* start = env->GetIntArrayElements(start_time, NULL);
11 jint* end = env->GetIntArrayElements(end_time, NULL);
12 int code = download(addr, (WORD)port, uname, pwd, (DWORD)channel, (DWORD*)start, (DWORD*)end, p);
13 env->ReleaseStringUTFChars(address, addr);
14 env->ReleaseStringUTFChars(username, uname);
15 env->ReleaseStringUTFChars(password, pwd);
16 env->ReleaseStringUTFChars(path, p);
17 env->ReleaseIntArrayElements(start_time, start, 0);
18 env->ReleaseIntArrayElements(end_time, end, 0);
19
20 return code;
21 }
上例中的DWORD就是unsigned long的别名。我們使用的是jintArray.
三、jni加載動态庫在windows和linux平台上的不同規則
對于System.loadLibrary("nvr");在windows上加載的是nvr.dll檔案而在linux上加載的是libnvr.so檔案
四、對于jni方法中傳回值為jintArray類型的處理方法
// 建立一個數組 jintArray arr = env->NewIntArray(2); // 擷取數組第一個元素的位址 jint* el = env->GetIntArrayElements(arr, NULL); // 給數組中的元素指派 *el = result[0]; *(el+1) = result[1]; 最後把數組傳回即可return arr;
轉載于:https://www.cnblogs.com/CLAYJJ/p/11336702.html