我正在使用 JNA
. Pointer
类表示 native 指针。访问似乎是 peer
的指针地址似乎很常见。成员变量。但是,他们确保您无法查询它。为什么?如果您想使用它,推荐的获取方式是什么?
我写了以下“hack”:
public static long getBaseAddress(Pointer pointer)
{
String stringPointer = pointer.toString();
String[] splitStringPointer = stringPointer.split("@");
int expectedSplitLength = 2;
if (splitStringPointer.length != expectedSplitLength)
{
throw new IllegalStateException("Expected a length of "
+ expectedSplitLength + " but got " + splitStringPointer.length);
}
String hexadecimalAddress = splitStringPointer[1].substring("0x".length());
return parseLong(hexadecimalAddress, 16);
}
但是除了滥用toString()
方法来获取地址,就没有其他合适的方法吗?
我想使用 Reflection
甚至比上面的方法还要少,因为它也很脆。
最佳答案
虽然子类化(如 technomage 的回答)有效,但没有必要。 Pointer.nativeValue(p)
会给你 p
的同伴。
正如我对其他答案的评论,“除非您知道自己在做什么,否则不要使用它。” JNA 中的任何内容通常都不需要它。只有当您确实出于其他目的需要内存地址时,对等值才真正相关。您可以迭代从 0 开始的偏移量以完成像 link 中的代码示例这样的习语。你在那里发表了你的评论。
Pointer 的 getter 都带有一个 offset
参数,您也可以使用 share()
简单地返回一个指向与原始对等值的偏移量的指针。 .
关于java - 访问 JNA 指针的对等值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803909/