Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JNR按值返回结构?_Java_Openh264_Jnr - Fatal编程技术网

Java 如何使用JNR按值返回结构?

Java 如何使用JNR按值返回结构?,java,openh264,jnr,Java,Openh264,Jnr,我正在尝试使用JNR从Java代码使用本机库。我调用的函数在openh264的C头文件中定义,用于返回一个简单的struct by value: typedef结构\u tagVersion{ 未签名的int-uMajor; 无符号整数; 无符号整数; 未签名的整数; }OpenH264版本; OpenH264版本WelsGetCodecVersion(无效); 我编写了以下Java副本: 公共类OpenH264版本扩展结构{ 公共OpenH264版本(运行时){ 超级(运行时); } pub

我正在尝试使用JNR从Java代码使用本机库。我调用的函数在openh264的C头文件中定义,用于返回一个简单的struct by value:

typedef结构\u tagVersion{
未签名的int-uMajor;
无符号整数;
无符号整数;
未签名的整数;
}OpenH264版本;
OpenH264版本WelsGetCodecVersion(无效);
我编写了以下Java副本:

公共类OpenH264版本扩展结构{
公共OpenH264版本(运行时){
超级(运行时);
}
public Unsigned32 uMajor=新的Unsigned32();
public Unsigned32或=新Unsigned32();
public Unsigned32 uRevision=新Unsigned32();
public Unsigned32 uReserved=新Unsigned32();
}
公共接口OpenH264{
公共OpenH264版本WelsGetCodecVersion();
}
最后尝试一下:

OpenH264-OpenH264=LibraryLoader.create(OpenH264.class)
.加载(“openh264”);
openH264版本=openH264.WelsGetCodecVersion();
但是,返回的版本有错误的值(并且每次调用的值都不同)。
该库是在Windows 10 x64上运行的x64。
我可以用JNI+JavaCpp加载相同的库,返回值是正确的。

我遗漏了什么?

我问了类似的问题:我当前的解决方案是将struct作为“@pinted@Out”参数返回,但我可以修改本机代码。出于好奇,您需要从JavaCPP获得什么才能继续使用它而不是切换到JNR?@SamuelAudet,JavaCPP自动化了大部分过程,但仍然需要本机编译和绑定本机lib。但由于这个问题,我们继续使用JavaCpp,像JNR这样的书籍不支持这一点(因为JNI不支持这一点),正如这里所解释的:@SamuelAudet,openh264允许在应用程序按需下载原始二进制文件时免版税使用。