在Windows上,我有一些通過Java Socket進入的第三方TCP數據,並且我試圖弄清楚如何將數據傳遞到由同樣的第三方 - 使用JNA。我對JNA/JNI/C等所有東西都很陌生。將套接字數據傳遞給JNA函數並使用void *參數
第三方庫將從套接字接收傳入字節並將它們解碼爲正確的消息類型。由於輸入的數據長度是任意的,沒有結尾分隔符,並且起始分隔符非常短(因此可能出現在數據的中間並且不是實際的分隔符),但實際上可能更容易弄清楚如何使用這個圖書館雖然JNA而不是滾動我自己的(或學習C)。
我設法使用jnaerator從C頭文件生成源代碼。我也成功地調用了一個不需要參數的簡單C函數。但是,當試圖使用需要將「原始數據」傳遞給最初接受空指針的C函數的函數時,我不知道如何繼續。
這裏是代碼相關的代碼片段。
//CExportTypes.h
typedef unsigned int XUint;
//also defines structs: XMessageType, XCrypto, XAlarm, etc.
//CLibrary.h
XStatus XGetMessageType(void* bytesRecv, XUint numBytes, XMessageType* type, XUint* serial, XUint* msgLen);
XStatus XDecodeAlarm(void* bytesRecv, XUint numBytes, XCrypto* key, XAlarm* decodedAlarm);
//CLibrary.java (Generated)
int XGetMessageType(Pointer bytesRecv, int numBytes, IntBuffer type, IntBuffer serial, IntBuffer msgLen);
int XDecodeAlarm(Pointer bytesRecv, int numBytes, XCrypto key, XAlarm decodedAlarm);
我如何獲得進入
int = Socket.getInputStream()
「原始數據」 到了JNA函數需要一個指針?我還需要注意哪些其他問題?字節順序,無符號字節問題等?
我知道這可能不會太多,但我很感激我能得到的任何幫助。