JNA 通过引用传递字符*
JNA Pass char* By Reference
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++(After:test(上重新分配,但由于某种原因,JNA 不知道这一变化。
这些线程表明我正在做的事情是正确的:
如何在 Java 中获取新的指针?
JNA 结构和指针映射
我也尝试过PointerByReference(虽然说实话,这就像是void**(,但我正在抛出我能得到的每一个想法。然而,上面的线程是关于传递结构的,而不是 char*,但我不明白为什么 JNA 会关心这里的区别。
有什么想法吗?
DllExport void LoadString(char **myStr)
{
cout << "Before: " << *myStr << endl;
LoadStringData(myStr);
cout << "After:" << *myStr << endl;
}
传递对内存 (char*( 的引用应该比传递它自己的内存 (char( 更好,这样您的更改就会返回到 Java。
相关文章:
- 成本字符*类型的非常量引用的无效初始化,并且来自常量字符*类型的临时引用
- 对 'i2c_smbus_read_word_data(int, 无符号字符)的未定义引用
- 分配取消引用的字符指针真的不可能吗?
- C++通过引用传递字符串与通过引用传递字符数组
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- 如何在C++中引用字符串的有限字符
- 为什么 std::string 的 back() 应该返回对字符的引用?
- 字符串引用和常量字符指针的函数重载
- C++ [链接器错误] 未定义对"执行计算(字符,双精度)"的引用
- 通过引用传递字符阵列
- 使用引用返回静态字符数组
- 取消引用无符号字符指针并将其值存储到字符串中
- 在C/C++中取消对字符指针的引用
- 为什么在动态数组中自动取消引用字符指针
- std::string运算符[]如何返回引用而不是字符
- 字符串的C++向量,为什么赋值会导致相同的字符引用
- 取消引用指向字符指针 c++ 的指针
- 通过引用字符 2 维调用字符串不起作用
- 了解字符引用
- 如何在c++中将数字字符引用转换为Unicode