Chet是由Libclang提供Delphi的.h-to-.pas翻译器。
与其他一些标题翻译器不同,Chet使用Clang编译器来解析标头文件,从而产生更准确的翻译,需要更少的手动调整。
一些值得注意的功能是:
#define声明翻译成常数。.h文件的整个目录生成一个.pas文件。这减少了由于标题文件之间的依赖关系而引起的问题。.chet项目文件以进行重复使用。 #ifdef指令的指导下)。这既是好又坏。这很好,因为它提高了转换精度。但这可能很糟糕,因为它使用Chet运行的系统来确定某些条件路径。例如,由于Chet在Windows上运行,因此它将在#ifdef _WIN32节中解析代码,但请跳过其他平台中的任何代码。 由于Chet使用了实际的编译器,因此您将需要安装(最小)C开发环境以及使用Clang的LLVM。 Clang需要能够找到用于开发环境的系统标题。如果您安装了带有Visual C ++的Visual Studio,则通常可以使用这些。 Visual Studio的免费(社区)版本就足够了。
您可以首先运行CHET,以检查与缺失依赖关系有关的任何错误。如果运行翻译器时会遇到任何依赖关系错误,则可以在此处下载依赖项:
您可以在Bin目录中使用预编译的64位Windows Chet应用程序。
如果您想自己编译Chet,那么您还需要Delphi的Libclang,并确保Delphi IDE可以找到它(如果Neslib.Clang目录与Chet Directory的级别相同)。
谢谢您的这些贡献:
切特非常简单。在许多情况下,您只需要提供标头文件的目录,输出.pas文件的名称,然后选择“运行标头转换器(F9)”。
要获得对转换过程的更多控制,您可以指定下面描述的各种选项。

您设置的任何配置选项都可以保存到.chet配置文件(这是一个简单的Ini-File)。这使您稍后可以加载设置以重新运行转换(例如,当发布了标题文件的新版本时)。您可以使用File菜单加载并保存这些配置选项。
要帮助预配置新会话的某些设置,请选择File | New Project... (Ctrl+N) 。您输入项目的名称,Chet将根据您输入的名称预先配置某些设置(尽管您稍后可以始终修改这些设置)。
就像单个选项Run Run Header Translator一样,您也可以使用F9激活。
项目页面包含最重要的配置选项:
.h文件的目录。该目录可以相对于包含.chet项目文件的目录。单击...按钮以浏览目录。建议您不要将目录与原始C源代码一起使用。而是将标题文件复制到仅出于转换目的的单独目录。这使得更轻松地删除不想转换的标头文件,或者将编辑为转换目的进行编辑。.pas文件的名称。我将为所有解析的标头文件生成单一组合的pascal文件。该名称可以相对于包含.chet项目文件的目录。单击...按钮打开一个保存对话框。Windows.Winapi ),则可以在此处列出这些单元。将添加到生成的pascal文件的使用条款中。在此页面上,您指定要定位的平台以及如何配置它们。
LIB_MYLIB ,因此将生成以下声明: const LIB_MYLIB = 'mylib.dll' 。接下来是您要定位的所有平台的复选框(32位窗口,64位Windows,32位MacOS,64位Linux,iOS和Android)。对于您检查的每个平台,您必须输入以下选项:
_字符)。在这里,您可以自定义Clang解析过程。
-D<define> ),并包括搜索路径( -I<path> )。有单独的按钮可以更轻松地添加这些按钮。有关可用命令行参数的信息,请参阅叮当文档。这是您自定义生成的输出的地方。
cdecl和stdcall之间进行选择。在几乎所有情况下,您都应使用默认的cdecl调用约定。仅适用于32位Windows DLL的stdcall ,您知道它是通过stdcall呼叫约定编译的。这些通常只是Windows系统DLL。大多数第三方DLL的使用CDECL。char类型是模棱两可的,可以用作8位整数或文本字符串中的字符。 signed char和unsigned char字符始终分别转换为Shortint和Byte 。但是,如果未指定签名性,则有以下选项:char转换为跨平台UTF8Char 。char转换为8位签名的Shortint 。char转换为8位未签名的Byte 。begin和procedure )。在这里,您指定要如何转换这些标识符:public )用作Delphi中的标识符,但看起来很奇怪,Delphi的语法荧光笔对它们的对待有所不同。因此,您通常也希望将这些视为保留的单词。type MyEnum = Integer; ),并为枚举中的每个选项创建常数。这可能更适用于某些库。#define ,请参见下面的评论)。在这里,您指定如何处理这些:TODO评论写入Delphi源代码,以及原始声明的评论版本。请记住,您可以通过选择View | Tool Windows | To-Do List 。请注意,Clang仅对Doxygen样式文档注释进行了解析。这些是遵循这些格式惯例的任何评论:
/// Comment (with 3 slashes)/** Comment (with two stars) *//*! Comment (with exclamation point) *////< Comment (applies to preceding declaration)/**< Comment (applies to preceding declaration) *//*!< Comment (applies to preceding declaration) */如果可能的话,Chet试图将#define声明转换为常数。这仅在以下情况下起作用:
#define ABS(x) (x < 0) ? -x : x无法翻译。#define FOO 3<<BAR将转换为const FOO = 3 shl BAR 。在这里,您可以指定要忽略的符号列表。这些符号不会翻译。
最常见的用途是忽略#define的转换错误或您不需要的功能。您还可以选择忽略某些类型,但这可能会导致以后导致编译错误,因为预期类型缺少。
请注意,符号对大小写。
最后一页只有一个按钮“ Run Header Translator”(您也可以使用F9激活)。它显示了翻译过程的进度以及解析标头文件时发生的任何错误。
您可以使用这些错误来修复标头文件,添加缺少的标头文件,或通过添加命令行参数来配置解析过程(例如,通过添加Include Include搜索路径)。
Chet是根据简化的BSD许可证获得许可的。有关详细信息,请参见License.txt。