在Java中,如何调用返回结构指针的C函数?

在Java中,如何调用返回结构指针的C函数?,java,c,Java,C,我有一个C函数: AES_KEY* generate_aes128_key() 它生成一个AES_密钥*。结构AES_密钥在openssl中定义,并在函数体中分配内存。我想在Java中调用这个函数来获取AES_密钥,那么我该怎么做呢?它几乎肯定会更容易使用(在运行时也可能更快)。如果您想从Java调用本机函数,那么您可以考虑使用JNI或JNA。本机指针可能以Javalong的形式返回(其中“可能”说明本机指针大小取决于实现)。然而,这可能不是您想要的,因为Java没有直接的方法来使用转换为

我有一个C函数:

AES_KEY* generate_aes128_key()  

它生成一个AES_密钥*。结构AES_密钥在openssl中定义,并在函数体中分配内存。我想在Java中调用这个函数来获取AES_密钥,那么我该怎么做呢?

它几乎肯定会更容易使用(在运行时也可能更快)。如果您想从Java调用本机函数,那么您可以考虑使用JNI或JNA。本机指针可能以Java
long
的形式返回(其中“可能”说明本机指针大小取决于实现)。然而,这可能不是您想要的,因为Java没有直接的方法来使用转换为-
long
的指针;您可能需要一个或多个附加的本机方法。这似乎表明可以通过java.security.*和javax.crypto.*类来完成。特别是,它说KeyGenerator必须支持AES 128位。JNA可能是最简单的方法。也有SWIG,它可以自动生成C结构和C++类的java绑定,但是这会花费你一些时间来建立。它几乎可以肯定地使用起来(并且在运行时也可能更快)。如果你想从java调用本地函数,那么你就在考虑使用JNI或者JNA。本机指针可能以Java
long
的形式返回(其中“可能”说明本机指针大小取决于实现)。然而,这可能不是您想要的,因为Java没有直接的方法来使用转换为-
long
的指针;您可能需要一个或多个附加的本机方法。这似乎表明可以通过java.security.*和javax.crypto.*类来完成。特别是,它说KeyGenerator必须支持AES 128位。JNA可能是最简单的方法。也有SWIG,它可以自动生成C结构和C++类的java绑定,但是这会花费你一些时间来建立。