3

我正在尝试使用 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 加载相同的库,并且返回值是正确的。
我错过了什么?

4

0 回答 0