问题标签 [jnr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
174 浏览

java - 调用 c 函数时 jnr-ffi 映射到 C 库崩溃

我有一个键值数据库,它是用 C 语言编写的,具有以下功能来设置和获取值。

以及其他一些函数来创建 ARK、计数、分配和使用字节。但是,每当我尝试设置或获取值时,它们都会按预期工作 JVM 崩溃。

这是我的 JNR 界面

这就是我要设置的值

运行 jar 后,我遇到了致命错误,核心转储中没有什么。

映射或传递值时是否有任何问题。

0 投票
1 回答
196 浏览

java - 如何像 python ctypes 那样指定 JNR 指针

使用 python 的 ctypes,可以指定一个带有类型的指针:

使用 JNR,它看起来像这样:

但是,是否可以将names字段键入为指向字符串的指针?

0 投票
1 回答
602 浏览

java - 如何从本机函数按值返回?

我使用 Visual Studio 2017 编译了以下 C++ 方法:

在 Java 代码中,它由 Java Native Runtime 使用具有以下签名的接口方法映射:

有用。

上面的 C++ 方法会导致内存泄漏,所以我想将其更改为按值返回结果:

我使用相同的 Java JNR 映射:

但它不起作用 - 访问冲突。调用了本机方法,但带有一些 dandling 指针值。

如何在 JNR 中按值返回?

0 投票
0 回答
273 浏览

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

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

我写了以下Java对应物:

最后尝试一下:

但是,返回的版本具有错误的值(并且它们在每次调用时都不同)。
该库是在 Windows 10 x64 上运行的 x64。
我可以使用 JNI+JavaCpp 加载相同的库,并且返回值是正确的。
我错过了什么?

0 投票
1 回答
855 浏览

java - 如何将本机内存复制到 DirectByteBuffer

我知道一种方法 -memcpy在 C++ 端使用:

C++ 方法:

JNR 映射:

Java 调用:

但是我想处理本机代码不复制数据而只返回指向要复制的内存的指针的情况:

C++ 方法:

我知道如何编写 JNR 映射以便能够将数据复制到HeapByteBuffer

Java 调用:

但是我还没有找到将内存复制到DirectByteBuffer而不是HeapByteBuffer. 上面的代码片段不起作用,DirectByteBuffer因为buffer.array()对于这样的缓冲区为 null,因为它由本机内存区域支持。

请帮忙。

0 投票
2 回答
233 浏览

java - 如何在 Clojure 中使用 defrecord 来扩展 Java 类?

根据我的研究,扩展 Java 类的方法基本上是使用命名空间中的 gen-class 或使用代理。但是查看Clojure 类型选择流程图,似乎建议我可以使用记录来扩展 Java 类:

  1. 该类型是否需要扩展 Java 类或实现任何接口?是的
  2. 你需要一个命名类型还是只需要一个匿名类型的实例?命名类型
  3. 您是否需要能够从 Java 中静态引用该类?不
  4. 您的班级是否对领域价值进行建模 - 从而受益于类似 hasmap 的功能和语义?是的

使用定义记录

所以问题是......如何?

例如(来自这个):

难道我...

?

0 投票
1 回答
1372 浏览

java - 使用 module-info.java 时无法加载 FFI 提供程序

我的 Linux Java 应用程序使用蓝牙设备。我使用这个库来与 bluez stack 通信:https ://github.com/hypfvieh/bluez-dbus 。

在我添加module-info.java到我的客户端代码之前,它运行良好。突然我得到这个错误:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:无法在 jnr.ffi@2.1.15/jnr.ffi.provider.InvalidRuntime.newLoadError 加载 FFI 提供程序 jnr.ffi.provider.jffi.Provider(InvalidRuntime.java:101 ) 在 jnr.ffi@2.1.15/jnr.ffi.Struct$NumberField.(Struct.java:872) 在 jnr.ffi@2.1.15/jnr.ffi.provider.InvalidRuntime.findType(InvalidRuntime.java:42)在 jnr.ffi@2.1.15/jnr.ffi.Struct$Unsigned16.(Struct.java:1240) 在 jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.(SockAddrUnix.java:209) 在 jnr.unixsocket @0.33/jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174) 在 jnr.unixsocket@0.33/jnr.unixsocket.UnixSocketAddress.(UnixSocketAddress.java:53) 在 dbus.java@3.2.3/org.freedesktop。 dbus.connections.transports.UnixSocketTransport.(UnixSocketTransport.java:32) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections。transports.TransportFactory.createTransport(TransportFactory.java:37) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.AbstractConnection.(AbstractConnection.java:161) 在 dbus.java@3.2.3/org.freedesktop .dbus.connections.impl.DBusConnection.(DBusConnection.java:334) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@ 3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java :219) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager .createInstance(DeviceManager.java:74) 在...createTransport(TransportFactory.java:37) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.AbstractConnection.(AbstractConnection.java:161) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections .impl.DBusConnection.(DBusConnection.java:334) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/ org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager .java:74) 在...createTransport(TransportFactory.java:37) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.AbstractConnection.(AbstractConnection.java:161) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections .impl.DBusConnection.(DBusConnection.java:334) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/ org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager .java:74) 在...dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.(DBusConnection.java:334) 上的connections.AbstractConnection.(AbstractConnection.java:161) dbus.java@3.2.3/org。 freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) 在 dbus。 java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection .java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.(DBusConnection.java:334) 上的connections.AbstractConnection.(AbstractConnection.java:161) dbus.java@3.2.3/org。 freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) 在 dbus。 java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection .java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...334) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl。 DBusConnection.getConnection(DBusConnection.java:169) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org。 freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...334) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl。 DBusConnection.getConnection(DBusConnection.java:169) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org。 freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github。 hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...getConnection(DBusConnection.java:219) 在 dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) 在 bluez.dbus@0.1.3/com.github。 hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) 在 ...

原因:java.lang.UnsatisfiedLinkError: could not get native definition for typePOINTER,原始错误消息如下:java.lang.UnsatisfiedLinkError: could not locate stub library in jar file。在 jffi@1.2.23/com.kenai.jffi.internal.StubLoader.getStubLibraryStream(StubLoader.java: 450) 在 jffi@1.2.23/com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:375) 在 jffi@1.2.23/com.kenai.jffi.internal.StubLoader.load(StubLoader.java: 278) 在 jffi@1.2.23/com.kenai.jffi.internal.StubLoader.(StubLoader.java:487) 在 java.base/java.lang.Class.forName0(Native Method) 在 java.base/java.lang .Class.forName(Class.java:427) at jffi@1.2.23/com.kenai.jffi.Init.load(Init.java:68) at jffi@1.2.23/com.kenai.jffi.Foreign$InstanceHolder .getInstanceHolder(Foreign.java:49) 在 jffi@1.2.23/com.kenai.jffi.Foreign$InstanceHolder.(Foreign.java:45) 在 jffi@1.2.23/com.kenai.jffi。

我试图在 module-info.java 中要求与此错误相关的所有内容,但没有成功:

先感谢您。