Java代碼:JNI崩潰:S
package library;
import java.nio.ByteBuffer;
public class Library
{
static{System.loadLibrary("TestDLL");}
native static void GetGLBuffer(ByteBuffer Buffer, int Width, int Height, int Size);
public static void main(String[] args) {
ByteBuffer B = ByteBuffer.allocateDirect(5);
byte[] C = {'H', 'E', 'R', 'E', '\0'};
B.put(C);
GetGLBuffer(B, 0, 0, 4);
System.out.println((char)B.get(0));
}
}
C++代碼:
JNIEXPORT void JNICALL Java_library_Library_GetGLBuffer(JNIEnv *env, jclass cls, jobject buffer, jint Width, jint Height, jint Size)
{
unsigned char* Buff = (unsigned char*)env->GetDirectBufferAddress(buffer);
//*Buff = 'A'; Crashes it.
//Buff[0] = 'A'; Crashes it.
//std::cout<<Buff[0]; Prints fine but crashes when this function ends.
}
如果我什麼都不做,它完美的罰款。另外,如果我在上面的函數中聲明瞭變量,它會崩潰。
我該如何解決?我做錯了什麼?
它打印出這個文件:http://pastebin.com/Mz76Bk8G
你不應該複製文件;你應該#從他們已經存在的地方包括他們。您不應該需要帶JNI的.def文件。 – EJP
沒有.def時不起作用。我不知道爲什麼。 我得到: 異常線程 「main」 java.lang.UnsatisfiedLinkError中:Library.GetGLBuffer;在Library.GetGLBuffer(本機方法) 在Library.main(圖書館V (L 的Java/NIO /字節緩衝區)。 java:21) 現在,如果我使用.def文件,它工作得很好。 – Brandon