从C头文件自动创建Delphi / Freepascal接口单元

时间:2012-10-17 16:44:53

标签: delphi pascal freepascal hdf5

是否可以从C头文件自动生成接口单元?特别是,我想包装HDF5库,如果我可以避免手动编写接口单元,那就太棒了。

4 个答案:

答案 0 :(得分:12)

免费pascal包含H2PAS工具。

  

h2pas 尝试将C头文件转换为pascal单元。它可以   处理在C头文件中找到的大多数C构造,以及   试图将它们翻译成他们的同行。

答案 1 :(得分:5)

Bob Swart(Dr Bob)有一个实用程序,它将转换许多头文件(尽管通常还涉及一些手工工作),称为HeaderConvert。我从未将它与工具@RRUZ链接进行比较,但它是另一种选择。

Project JEDI也有一个;我从来没有测试过它。你可以找到它here

答案 2 :(得分:5)

通常完全自动化将C标头翻译成其他内容(这不是所需C功能的有效超集)很难不可能

这是因为由于宏,人们无法看到如何翻译它们。宏通常只从上下文中获取它们的含义。实施例

#define uglymacro 1,2,3,4

但也(这个更常见):

SCARYAPIMACRO void func(int c);

SCARYAPIMACRO通常是一个宏,它测试OS定义为正确的OS /架构选择正确的调用约定。

但是,这并不意味着工具不是真正的节省时间。但结果更半自动,我是h2pas最好和最好的经验。

我翻译了很多Windows标题(包括FPC的commctrl,每隔几行都有一个sendmessage宏)。

我通常做的是制作一个小的pascal程序,扫描源代码行,并使用启发式方法将其拆分为大部分是同构的部分(所有结构或常量,宏,过程声明等)。然后我查看源代码并经常做一些全局替代。

只有这样我才能通过翻译器运行,这个过程通常是迭代的(精炼分离,做全局替换,尝试翻译,如果失败,再试一次等​​等。)

不幸的是,这个过程确实需要很好地掌握C,包括pragma内容。

答案 3 :(得分:1)

您可以从我的页面下载HDF5 API头Delphi翻译,Delphi XE2 HDF5表测试程序,源代码和稍微修改过的hdf5dll: http://www.astro.ff.vu.lt/index.php?option=com_content&task=view&id=46&Itemid=63