我開始使用JNA與計算機的RS485接口上的設備進行通信。令我意外的是,我很快就收到了良好的結果。但是現在我陷入了一個簡單的問題。我使用的庫接受一個指向struct指針的指針。而實際的簽名JNA:將結構指針設置爲NULL
func(Struct1 **, Struct2 **, Struct3 *, Struct4 *, long)
我們指明庫的預期,最後的指針是NULL指針,第一個參數的大小。這是失敗的。下面的代碼是什麼我試過到目前爲止:
Struct1.ByReference[] s = (Struct1.ByReference[]) new Struct1.ByReference().toArray(size);
int pos = 0;
// ...
// for loop to set the s[pos] struture values
for(pos = 0; pos < size - 1; pos++)
// ...
// Now set the last array element to a null pointer to indicate end-of-list
s[pos].getPointer().setPointer(0, null);// Following does not work: results in zero memoried structure
s[pos] = null; // Following does not work wither: NullPointerException at com.sun.jna.Structure.autoWrite
編輯1
s[pos] = new Struct1.ByReference(Pointer.NULL); // results in zero memoried structure as well
EDIT 2
根據technomage的問題。如果我要寫C代碼,它可能看起來像這樣:
Struct1 **s = malloc(n * sizeof(Struct1*));
for(int i=0; i<n; i++)
{
if(i == n -1)
{
s[i] = NULL;
}
else
{
s[i] = malloc(sizeof(Struct1));
s[i].bla = value;
....
}
}
但要警告:我不是很熟練的C/C++。我認爲Java是我的領域。
有沒有人有類似的問題?也許我只是沒有看到樹木...
在此先感謝。
請包括本地使用的樣本。沒有該上下文,指針變化的函數聲明可能不明確 - 無法區分指向數組的指針,指向單個指針值的指針或其他幾種變體。 – technomage
你是什麼意思'示例用法'?該庫是從運行FreeRTOS的嵌入式設備代碼中採用的,FreeRTOS是一個開源的實時操作系統。除了導出庫方法的頭文件外,我沒有任何本地代碼。 –
如果你要用'C'編寫代碼,以你想要的方式訪問庫,那麼_that_會是什麼樣子? – technomage