我正在尝试使用 JNR 从 Java 代码中使用openh264本机库。我正在调用的函数在 openh264 的 C 头文件中定义,以按值返回一个简单的结构:
typedef struct _tagVersion {
unsigned int uMajor;
unsigned int uMinor;
unsigned int uRevision;
unsigned int uReserved;
} OpenH264Version;
OpenH264Version WelsGetCodecVersion (void);
我写了以下Java对应物:
public class OpenH264Version extends Struct {
public OpenH264Version(Runtime runtime) {
super(runtime);
}
public Unsigned32 uMajor = new Unsigned32();
public Unsigned32 uMinor = new Unsigned32();
public Unsigned32 uRevision = new Unsigned32();
public Unsigned32 uReserved = new Unsigned32();
}
public interface OpenH264 {
public OpenH264Version WelsGetCodecVersion();
}
最后尝试一下:
OpenH264 openH264 = LibraryLoader.create(OpenH264.class)
.load("openh264");
OpenH264Version version = openH264.WelsGetCodecVersion();
但是,返回的版本具有错误的值(并且它们在每次调用时都不同)。
该库是在 Windows 10 x64 上运行的 x64。
我可以使用 JNI+JavaCpp 加载相同的库,并且返回值是正确的。
我错过了什么?