问题标签 [jniwrapper]
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.
java - Java JNI 意外减速
我正在尝试在 Raspberry Pi 中为 RCSwitch 实现一个 java 包装器。它工作正常,直到抓取方法达到第 80 次迭代。然后它变慢了,我不知道为什么。返回值需要 5 分钟以上。我试图找出问题所在,但我并没有内存不足,覆盆子仍然有超过 300 兆。尽管如此,我还是尝试使用以下参数运行 JVM:-Xms5m -Xmx5m
但程序在第 80 次迭代时仍然变慢,所以我认为这不是内存问题。我的发件人仍然发送该值,因为如果我重新启动程序,它会再次工作,直到第 80 次迭代,所以这不是缺少输入数据。
这是代码的java部分:
代码的 C++ 部分:
现在我很困惑,想不出解决办法。
提前致谢。
pointers - SWIGTYPE 指针赋值很慢
我正在使用 SWIG 通过 JNI 为 Java 包装某些 c++ 代码。
在Java中我有
我将数组传递给 C++ ,但是当 n 很大并且我必须这样做 1000 次时,它变得非常慢......
有没有更快的方法来做到这一点?具体来说:有没有办法在Java中创建一个数组并将整个东西一次传递给c++?
谢谢
java - 如何将 C 结构的以下元素映射到 Java?
我有以下需要映射到 Java 的 C 结构。因为我需要从 C 代码生成的 DLL 中调用一个方法。以下是我的结构。
IPJ_READER_CONTEXT 和 IPJ_READER_IDENTIFIER 如下所示。
如何解析这两个元素以映射到 Java?请指教。
c++ - 可以直接从 C++ 调用 JNI c++ 方法吗?
是否可以从 c++ 调用 JNI c++ 方法(通常仅在 Java 中使用)假设有一个使用 JNI 方法的 Android 库,我想直接从我的 c++ 代码中使用这些方法,而不是创建 Java 层。这可能吗?我无法修改 JNI 方法,我不知道 JNI 方法会发生什么,所以我不能直接使用公共 c++ 方法,我不想将数据向上传递做 java 只是为了再次通过jni接口
java - java.lang.UnsatisfiedLinkError:由于库未加载而找不到实现
当它说 jniLibs 和其他库中的 .so 文件无法加载时,我正在尝试将本机编写的共享库集成到我的应用程序中。
这是C文件
这是Java文件
下面给出了确切的错误
Android.mk文件如下
如果需要更多信息,请告诉我。谢谢。
java - 如果您知道方法签名,则为 DLL 文件创建 .h 文件
我正在尝试访问 Java 中 DLL 文件的方法。
我想使用ComfyJ为 DLL 文件创建一个包装器。ComfyJ 有一个向导,但是当我选择 DLL 文件时,它说它不能使用这种 DLL 文件。
所以,接下来我尝试使用JNIWrapper向导,但它需要一个.h
文件。问题是,我没有.h
这个 DLL 的文件。
(我有这两个工具的商业许可证)。
我有点惊讶没有办法.h
为任何给定的 DLL 文件导出或创建文件。我搜索了互联网,但找不到任何能够做到这一点的工具。这让我觉得我仍然缺少一些信息,这些信息不在 DLL 文件中,但对于创建此.h
文件是必需的。
其次,我确实知道所有方法名称、参数和返回类型。那是因为WinApiOverride工具可以为我列出它们。我什至可以看到在应用程序运行时哪些参数被传递给了这个 DLL 文件的函数/方法。
所以,我的印象是我拥有所有必需的信息。在我深入之前......我的问题:你认为我.h
可以使用记事本手动创建这个文件吗?
法律说明:此 DLL 文件不是预安装的 DLL。它是我拥有有效商业许可证的商业应用程序的一部分。该公司表示,只要我仅将其用于个人用途,我就可以随意使用他们的 DLL 文件。
编辑:
我也尝试自己编写 jniwrapper 代码。结果看起来像这样:
结果是一个奇特的例外:
那个奇怪的方法名似乎是正确的形式。方法名称确实看起来很奇怪。我发现这是因为 C++“编码”了 dll 文件中的文件名。?FooAddBar@@YA_NHHH@Z
实际上是bool FooAddBar (int, int, int)
。
尽管如此,JNIWrapper 似乎更喜欢编码名称。因为当我尝试使用短名称"FooAddBar"
或其他任何东西时,我已经有一个异常,因为它找不到该方法。另一方面,当我使用编码的方法名称(即"?FooAddBar@@YA_NHHH@Z"
)时,它确实找到了方法,证明它是正确的。
但是,在调用期间,事情确实出错了。所以,我猜我使用了错误的参数或其他东西。显然,我做错了什么,并希望 JniWrapper 向导可以创建一个正确的包装器来解决这个问题。(但是,在这种情况下,我确实需要一个.h
文件)。
c++ - dyld:惰性符号绑定失败:找不到符号:预期在:平面命名空间
我最近将 OpenCv 更新到了 3.2.0 版,因此不得不重写我的一些 JNI 包装器。但是,现在它向我抛出了这个错误:
这是我使用该MSER::create
功能的结果。我已经尝试返回一个新的地址Mat
并且它没有出现错误,所以我相信这与其他人遇到的与 MacOS 和 dylibs 相关的类似错误无关(即其他人通常在加载库时遇到问题,而我的是仅与MSER::create
)。相信我,我已经在网上搜索了至少 2 个小时来寻找解决方案,但我找不到。
这是我的 MSER.cpp 文件中的相关代码:
JNI 包装器的代码:
任何帮助,将不胜感激!
谢谢,
基拉
java - 为什么当我在 64 位 jvm 中打开带有小程序的页面但在 32 位 jvm 中可以正常工作时,IE 11 会崩溃?
我有一个加载小程序的网页。如果我安装了 32 位 jre,一切正常,但是当我只有 64 位 jre 时,IE 11 一打开页面就会崩溃。
此外,当我同时保留 32 位和 64 位时,无论我在环境变量中保留什么,页面都会加载,但小程序由 32 位 jvm 运行,即使我没有将其路径放在任何地方。
32 位和 64 位版本相同,即 8u51。
我也试过禁用 IE 的所有附加组件,但没有运气。没有生成任何日志,所以我不知道在哪里看。
我能想到的唯一原因是存在一些dll冲突。我在小程序中使用 JNI。
另外,当我没有指定任何地方时,为什么它自己选择 32 位 jvm?
java - 如何将 jchararray 作为参数发送到 C 函数
我正在尝试在 android 应用程序中使用 C 库(预先编写和发布)。我开始着手围绕这个 C 库编写 JNI 包装器。我不知道如何jchararray
正确传递给C。
我的 JNI 包装器看起来像
我已经通过在方法中打印它们来验证它们int[]
是否可以很好地传递到 C 库。getData()
但问题在于传递jcharArray data_
给char data[]
我已经data_
使用(*env)->GetArrayLength(env, data_);
. 当我在方法内部打印时Java_eg_test_freqProcessor
,我看到
但是在getData()
方法内部,如果我在同一个集合上进行迭代,我只会看到一半的数据。
这个库执行就地转换data[]
,我稍后需要访问它。我知道这jchar
是一个大于的字节,char
但我仍然无法理解处理这个问题的正确方法。
谢谢
c++ - C++ 中 JNI MethodCall 的包装函数
我的问题是:是否有任何好的解决方案来编写一个接收变量参数的包装函数,可以使用这些参数,但也可以将它们传递给任何 jni callmethod-function?我已经尝试过诸如可变参数函数之类的东西。我已经设法从函数接收变量参数,但我没有设法将这些变量参数传递给任何进一步的 jni 方法函数。我真的无法在 Internet 上找到有关此主题的帮助。希望你能帮助我。
}