Как вернуть структуру по значению, используя JNR? - PullRequest
4 голосов
/ 16 мая 2019

Я пытаюсь работать с нативной библиотекой openh264 из кода Java с использованием JNR.Функция, которую я вызываю, определена в заголовочном файле C openh264, чтобы вернуть простую структуру по значению:

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();

Однако возвращаемая версия имеет неправильные значения (и они отличаются при каждом вызове).
В библиотеке x64 работала на Windows 10 x64.
Я мог загрузить ту же библиотекус JNI + JavaCpp и возвращаемые значения были правильными.
Что мне не хватает?

...