【发布时间】:2017-05-17 23:21:34
【问题描述】:
我正在尝试调用 Apple 的 Security.h 框架中的一个方法,该方法通过引用返回一个结构,如下所示:
int findSomething(SomeStruct *s)
(具体是this method,我正在尝试获取itemRef。有一个用法示例here。)问题是我不知道SomeStruct有哪些字段或它有多大是。它只存在以传递给其他本机库函数。所以,我想要这样的东西(Java):
interface SomeLib extends Library {
int findSomething(Pointer p);
}
...
Pointer p = ... // Not sure how to make this
nativeLib.findSomething(p)
// Do something with p
如果我可以在 Java 中执行 sizeof(SomeStruct),我想我可以使用 JNA Memory 创建指针。我可以编写一个原生方法来返回sizeof(SomeStruct),但我不想在自己的代码中添加原生组件。
这类似于this question,但它询问了SomeStruct 的字段在运行时已知的情况,而在我的情况下,这些字段被库作者有意隐藏了。
【问题讨论】:
-
如果需要分配空间,只需要
Memory。如果您只需要本机对等值,为什么Pointer不像您所描述的那样工作? -
@DanielWiddis 如何创建指针?
-
感谢您提供更多详细信息。您需要
PointerType或其扩展名之一。 @cubrr 在下面给出了一个很好的答案。
标签: java c pointers struct jna