如何为一组Pascal库函数编写Java JNI包装器?

3

我想从Java中使用某个库。

这个库本身是用Pascal编写的,并编译成DLL。我可以阅读所有相关源代码(它是免费和开源的),但我很难影响对库原始代码的任何更改提议。我对Pascal的知识或经验非常少。该库本身在一定程度上处理通过内存传递和获取结构体。 (如果是C,函数会采用并返回结构体指针。不幸的是,我不知道Pascal中的等效名称。)

我想制作一个Java包装器来使用这个库。我想能够调用这些函数。我已经阅读了许多有关Java本地接口的教程。我理解如何与这些函数进行接口交互。但我不知道如何处理这些内存中的结构体。

我真的很感激如果有人能帮助我解决这个问题,或者指向一个好的资源。到目前为止,我所读的大多数内容都排除或忽略了似乎是我所需要最重要的部分——处理我内存中的这些结构体。

谢谢大家。


澄清一下,我希望从这个结构体中读取数据,并将其传递回其他函数调用中。 - Ming
使用哪个Pascal编译器来生成DLL?我以前从C调用过Delphi编译的DLL,也从Delphi调用过C编译的DLL,这都相当简单。在大多数情况下,Pascal的记录与C的结构体非常相似,只要选择正确的类型使每个字段的字节数匹配,你就应该没问题。字符串可能会更有趣,因为有许多不同的变体存在... - John Pickup
1
因此,我建议编写一些C语言测试代码,以查看是否可以调用DLL函数并传递结构。一旦完成这一步骤,您就可以开始使用C签名来处理JNI调用。 - John Pickup
1个回答

1
根据我的经验,我会避免使用JNI(太过复杂),而是使用JNA。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接