JNA传递的char *通过参考
问题描述:
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会在意这里的区别。
任何想法?
答
DllExport void LoadString(char **myStr)
{
cout << "Before: " << *myStr << endl;
LoadStringData(myStr);
cout << "After:" << *myStr << endl;
}
应该更好地工作,通过一个参照存储器(字符* ),而不是存储它的自我(炭),这样,您的更改,使其恢复到Java。