Я пытаюсь работать с нативной библиотекой 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 и возвращаемые значения были правильными.
Что мне не хватает?