使用java代码中的windows静态库,只需很少的工作量(优先使用JNA)

时间:2009-05-10 09:45:17

标签: java java-native-interface shared-libraries native jna

我必须使用java代码中的一些静态Windows库(*.lib),我可以编写C ++ JNI包装器,但我宁愿不这样做(不是在C ++中有经验)。

使用它的最简单(最不发达的努力)方式是什么,性能并不重要,因为该代码只是获取一些数据,最有可能在JAVA方面进行处理。

我很可能会使用JNA,但AFAIK需要动态库,我有静态库。

我还asked questio n将静态库转换为动态库。

2 个答案:

答案 0 :(得分:3)

您始终可以创建一个直接调用静态库的DLL(动态库)项目,然后可以将JNA与新创建的DLL一起使用。

答案 1 :(得分:2)

为了它的价值,我有一个像这样的项目。自动生成JNI包装器非常容易。我认为我们有大约350个函数导出来包装。我们花了大约3个小时来组装一个脚本来自动生成包装器(抱歉,没有方便的脚本或我发布它)。

我们自己写的几乎没有C ++代码 - 但它确实需要理解JNI如何工作......这实际上是一个非常好的学习机会/项目 - 如果你有时间,不要害怕JNI - 你会成为对于你对JVM的工作原理有多了解感到惊讶......

如果你选择这条路线,我建议你保持你的包装功能真的非常轻巧 - 根本就没有处理它们。只需将必要的参数从JNI值转换为native(这通常是字符串所需),调用本机函数,然后将结果转换回来。

如果你有一个传入字符串指针并希望字符串返回指针的函数,请使用Java端的大小为1的字符串数组,并使用本机调用的结果填充它。

或者,如果你按时间,将.lib编译为.dll并使用JNA: - )