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