DllExport void LoadString(char *myStr)
{
cout << "Before: " << myStr << endl;
LoadStringData(&myStr);
cout << "After:" << myStr << endl;
}
и это в Java:
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 ++ (после: test), но по какой-то причине JNA не знает об этом изменении.
Эти темы говорят о том, что я делаю правильно:
Как получить новый указатель на Java?
Отображение структуры и указателя JNA
И я также попробовал PointerByReference (хотя, честно говоря, это действует как void **), но я выбрасываю каждую идею, которую я могу достичь. Однако вышеприведенные темы касаются прохождения структур, а не char *, но я не понимаю, почему JNA будет заботиться о разнице здесь.
Есть идеи?