将void**指针转换为等效的Java类型

Gui*_*ron 6 java dll types pointers

我正在用Java编写的程序加载一个C DLL.我希望能够使用此声明从DLL中调用其中一个方法:

dll_function(const char* foo1, const char* foo2, const char* foo3, void** bar, size_t* bar2);
Run Code Online (Sandbox Code Playgroud)

如何在Java中使用正确类型的参数调用此方法?我知道(理论上)如何调用它,但我想知道的是如何从我的Java程序中传递"void**"和"size_t*"?基本上,我想知道什么是void和size_t***的"等效类型" 在Java中 ...

我找到了Pointer类,但没有设法让它工作?非常感谢 :)

Ala*_*lan 1

size_t一个整数,用于表示内存中变量的大小;因此,您应该可以安全地使用unsigned longJava。

void*可能是一个指向未知类型对象的指针。这个问题,就此事而言,颇为有趣。In JavaObject通常在这种情况下使用,但我不知道如何在它们之间进行转换,尽管这个问题可能会有所帮助。

  • 我阅读了JDK源代码。`long` 用于在 JDK 本身中存储“对等对象”(如果您感兴趣,请搜索 `AWTObject` 并查找 `pData` 指针)。Android 源代码也使用“long”来达到同样的目的。所以我认为使用“long”是最佳实践。 (2认同)