我想使用JNA来调用DLL函数,但是这个库使用了非标准的C类型。
我可以在wikipedia中看到mapping between C and Java standard types是什么,但是,自定义类型发生了什么呢?
发布于 2017-05-02 16:06:19
你可以用C/C++编写一个包装器。此包装器包括定义自定义类型的标头。新的包装器函数应该只接受标准类型作为输入,并在调用库函数之前将其“转换”为自定义类型,以同样的方式也可以转换返回值。现在通过JNA从Java调用包装器函数。
否则,您可以随时查看SWIG和JNI。
发布于 2017-05-03 12:31:05
Java类到依赖于体系结构的类型的映射是严格意义上的,这正是JNI库的目的。只将它看作一个接口库,将传递给JNI调用的类和类型映射到C或C++程序的类型和类中,因此在这样做时会遇到非标准问题。
例如,我认为与linux/gcc的接口应该与与Windows/VisualStudio的接口稍有不同。
无论如何,Oracle(前Sun Microsystems)的人做了一项很好的工作,试图隐藏大部分依赖于体系结构的代码,并试图成为尽可能标准的代码。
我在这里感谢他们:)
https://stackoverflow.com/questions/43732280
复制相似问题