2017-05-02 67 views
0

我想使用JNA调用DLL函数,但该库使用非标准C类型。带有JNA的非标准类型

我可以在wikipedia中看到什么是mapping between C and Java standard types但是,自定义类型发生了什么?

+1

这就好比说“我想购买飞行烤面包机。我已经看过的所有的商店,并有大量烤面包机,但什么是与飞行烤面包机发生?”那么,***没有人出售。***你期望什么? –

+1

小心提供任何这些有问题的自定义类型?如果你不明白C中的类型是如何定义的,那么值得复习。 – technomage

回答

0

你可以在C/C++中编写一个包装器。该包装器包含定义自定义类型的标题。新的包装函数应该只接受标准类型作为输入,并在调用库函数之前将“翻译”为自定义类型,与返回值也可以进行翻译的方式相同。现在通过JNA从Java调用你的包装函数。

否则,您可以随时查看SWIG和JNI。

+0

谢谢@visibleman。我认为JNA比JNI更好,对吗? – Amparo

+1

@ JNA项目页面的@Amparo(https://github.com/java-native-access/jna):“_JNA使用一个小的JNI库存根来动态地调用本地代码。开发者使用Java接口来描述函数以及目标本地库中的结构,这使得利用本地平台特性**非常容易,而不会导致为多个平台配置和构建JNI代码的高昂开销** _“ – cubrr

0

将Java类映射到体系结构依赖类型是精简版 JNI库的目的。将它看作只是一个接口库,将传递给JNI调用的类和类型映射到C或C++程序的类型和类中,因此需要考虑非标准问题。例如,认为与linux/gcc的接口应该与连接到Windows/VisualStudio有所不同。无论如何,甲骨文公司(前Sun Microsystems公司)的员工已经做了一项很好的工作,试图隐藏大多数依赖于架构的代码并尽可能标准化。

我对他们的感激之情从这里:)