2
DllExport void LoadString(char *myStr)
{
cout << "Before: " << myStr << endl;
LoadStringData(&myStr);
cout << "After:" << myStr << endl;
}
,這在Java中:JNA傳遞的char *通過參考
Pointer myStr = new Memory(Pointer.SIZE);
System.out.println(String.format("myStr Value: %s", myStr.getPointer(0).getString(0)));
this.Lib.LoadString(myStr);
System.out.println(String.format("myStr Value: %s", myStr.getPointer(0).getString(0)));
這是輸出:
myStr Value: ¸ï1
Before: Øî1
After:test
myStr Value: ¸ï1
因此,我可以清楚地看到被傳遞的垃圾指針,重新分配在C++上(After:test),但由於某種原因,JNA沒有意識到這種變化。
這些線程建議我在做什麼是正確的:
How to obtain a new Pointer in Java?
JNA Struct and Pointer mapping
而且我也試過PointerByReference(不過說實話,那就像無效**)但我正在拋出每一個想法,我可以得到它。然而上面的線程是關於傳遞結構的,而不是char *,但我不明白爲什麼JNA會在意這裏的區別。
任何想法?