我正在做一个项目,我有一些传感器,我希望它们通过 USB 连接到 PC。现在他们写了一个用c编写的windows lib,所有函数都使用c的cdecl调用约定,我必须确保如果我用其他语言(java!)编程,调用约定是给定的。
所以我研究了一下,发现了一些在java中绑定dll和或使用JNA的教程。但这对我来说都是新事物,我想确定它是可能的(也许是一个例子)-该设备并不便宜,我想在购买之前知道这一点。
我正在做一个项目,我有一些传感器,我希望它们通过 USB 连接到 PC。现在他们写了一个用c编写的windows lib,所有函数都使用c的cdecl调用约定,我必须确保如果我用其他语言(java!)编程,调用约定是给定的。
所以我研究了一下,发现了一些在java中绑定dll和或使用JNA的教程。但这对我来说都是新事物,我想确定它是可能的(也许是一个例子)-该设备并不便宜,我想在购买之前知道这一点。
您可以从 Java 调用 C 代码 - 这里没有问题。
然后,如果你的 C 例程中有一些非常具体的东西,你总是可以通过包装器。
看看这里。
http://jnicookbook.owsiak.org/recipe-No-018/
在此示例中,您调用的 C 代码反过来又调用另一个库。
您也可以通过将 JNI 代码与其他库链接来实现。像这儿:
https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo023
有很多选择。当谈到 JNI 与 JNA 时。确保 JNA 足够高效。一般来说,JNA 往往较慢。看看这里:
https://github.com/mkopsnc/keplerhacks/tree/master/jnijna
希望这可以帮助。
我不在这里发布代码 - JNI Cookbook 中的所有示例都可以从 github 获得。