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

and*_*s-h 8 delphi pascal freepascal hdf5

是否可以从C头文件自动生成接口单元?特别是,我想包装HDF5库,如果我可以避免手动编写接口单元那将是很好的.

RRU*_*RUZ 12

免费pascal包括H2PAS工具.

h2pas尝试将C头文件转换为pascal单元.它可以处理在C头文件中找到的大多数C构造,并尝试将它们转换为它们的pascal对应物.


Ken*_*ite 5

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

JEDI项目也有一个; 我从来没有测试过它.你可以在这里找到它.


Mar*_*ort 5

通常,将C头完全自动转换为其他东西(这不是所需C功能的有效超集)很难实现.

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

#define uglymacro 1,2,3,4
Run Code Online (Sandbox Code Playgroud)

而且(这个更常见):

SCARYAPIMACRO void func(int c);
Run Code Online (Sandbox Code Playgroud)

然后,SCARYAPIMACRO通常是一个宏,它测试操作系统定义为正确的操作系统/体系结构选择正确的调用约定.

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

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

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

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

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