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。