vs2013封裝dll以及java呼叫
阿新 • • 發佈:2018-11-25
public class SVBufferAppend {
public static native int byteAppend(byte[] svBuffer, int offset,int ct,int cl,int vl,int value);
}
編譯成.class檔案 javah -classpath . -jni SVBufferAppend 生成.h檔案 如下
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class SVBufferAppend */ #ifndef _Included_SVBufferAppend #define _Included_SVBufferAppend #ifdef __cplusplus extern "C" { #endif /* * Class: SVBufferAppend * Method: byteAppend * Signature: ([BIIIII)I */ JNIEXPORT jint JNICALL Java_SVBufferAppend_byteAppend (JNIEnv *, jclass, jbyteArray, jint, jint, jint, jint, jint); #ifdef __cplusplus } #endif #endif
用VS新建win32 的專案 配置如下
選擇 程式型別 DLL 勾上匯出符號 去掉 安全開發生命週期檢查的勾(SDL)
右擊專案選擇屬性 設定平臺 X64
配置屬性 常規 配置型別 dll動態庫
vc++目錄 選擇包含目錄 C:\java\jdk1.7.0_80\include C:\java\jdk1.7.0_80\include\win32
庫 目錄 C:\java\jdk1.7.0_80\lib
然後包含之前生成的 .h檔案
編寫對應的方法程式碼
JNIEXPORT jint JNICALL Java_SVBufferAppend_byteAppend (JNIEnv * a, jclass b, jbyteArray c, jint offset, jint ct, jint cl, jint vl, jint value){ /* jbyte* bytebuf = new jbyte[byteArrayLength]; //JAVA to DLL a->GetByteArrayRegion(c, 0, byteArrayLength, bytebuf); printf("%x\n", *bytebuf); printf("%x\n", *(bytebuf+1)); printf("%x\n", *(bytebuf+2)); //DLL set to JAVA //a->SetByteArrayRegion(c, 0, byteArrayLength, bytebuf); delete[] bytebuf; */ // 獲取傳過來的陣列長度 int byteArrayLength = a->GetArrayLength(c); printf(" byteArrayLength=%d\n", byteArrayLength); // 獲取陣列操作 jbyte* bytebuf = a->GetByteArrayElements(c, JNI_FALSE); a->ReleaseByteArrayElements(c, bytebuf, 0); return 0; }
最後java直接使用方法名呼叫即可