Chet adalah penerjemah .h-to-.pas yang ditenagai oleh LibClang untuk Delphi.
Tidak seperti beberapa penerjemah header lainnya, Chet menggunakan compiler dentang untuk parse header file, menghasilkan terjemahan yang lebih akurat yang membutuhkan lebih sedikit penyesuaian manual.
Beberapa fitur penting adalah:
#define Declarations ke konstanta jika memungkinkan..pas untuk seluruh direktori file .h . Ini mengurangi masalah karena ketergantungan antara file header..chet untuk digunakan kembali. #ifdef ). Ini baik dan buruk. Itu bagus karena meningkatkan akurasi konversi. Tapi itu bisa buruk karena menggunakan sistem yang dijalankan Chet untuk menentukan beberapa jalur bersyarat. Misalnya, karena Chet berjalan pada Windows, itu akan menguraikan kode di bagian #ifdef _WIN32 tetapi melewatkan kode apa pun di bagian untuk platform lain. Karena Chet menggunakan kompiler yang sebenarnya, Anda harus memiliki lingkungan (minimal) C yang berkembang yang dipasang, serta LLVM dengan dentang. Dentang harus dapat menemukan header sistem untuk lingkungan pengembangan. Ini biasanya akan tersedia jika Anda memiliki beberapa versi Visual Studio dengan Visual C ++ diinstal. Edisi (komunitas) Visual Studio cukup.
Anda dapat menjalankan Chet terlebih dahulu untuk memeriksa kesalahan apa pun yang terkait dengan dependensi yang hilang. Jika Anda mendapatkan kesalahan ketergantungan saat menjalankan penerjemah, maka Anda dapat mengunduh dependensi di sini:
Anda dapat menggunakan aplikasi Windows Chet 64-bit yang telah dikompilasi sebelumnya di direktori Bin .
Jika Anda ingin mengkompilasi Chet sendiri, maka Anda juga memerlukan liblat untuk Delphi dan memastikan Ide Delphi dapat menemukannya (proyek Chet akan menemukannya secara otomatis jika direktori Neslib.Clang berada pada tingkat yang sama dengan direktori Chet ).
Terima kasih atas kontribusi ini:
Chet cukup mudah. Dalam banyak kasus, Anda hanya perlu memberikan direktori dengan file header, nama file output .pas dan pilih "Jalankan header translator (F9)".
Untuk kontrol lebih lanjut atas proses konversi, Anda dapat menentukan berbagai opsi, yang dijelaskan di bawah ini.

Setiap opsi konfigurasi yang Anda atur dapat disimpan ke file konfigurasi .chet (yang merupakan file ini sederhana). Ini memungkinkan Anda untuk memuat pengaturan nanti untuk menjalankan kembali konversi (misalnya, ketika versi baru dari file header telah dirilis). Anda dapat memuat dan menyimpan opsi konfigurasi ini menggunakan menu File .
Untuk membantu pra-konfigurasi beberapa pengaturan untuk sesi baru, pilih File | New Project... (Ctrl+N) . Anda memasukkan nama proyek dan Chet akan mengkonfigurasi beberapa pengaturan berdasarkan nama yang Anda masukkan (meskipun Anda selalu dapat memodifikasi pengaturan tersebut nanti).
Menu Run tepat sebagai Run Header Translator opsi tunggal, yang juga dapat Anda aktifkan dengan F9 .
Halaman Proyek berisi opsi konfigurasi paling penting:
.h file di sini. Direktori mungkin relatif terhadap direktori yang berisi file proyek .chet . Klik tombol ... untuk menelusuri direktori. Dianjurkan agar Anda tidak menggunakan direktori dengan kode sumber C asli. Sebaliknya, salin file header ke direktori terpisah hanya untuk tujuan konversi. Ini membuatnya lebih mudah untuk menghapus file header yang tidak ingin Anda konversi, atau melakukan pengeditan ke file header untuk tujuan konversi..pas yang akan dihasilkan. File Pascal gabungan tunggal saya akan dihasilkan untuk semua file header yang diuraikan. Nama tersebut mungkin relatif terhadap direktori yang berisi file proyek .chet . Klik tombol ... untuk membuka dialog Simpan.Windows.Winapi ), maka Anda dapat mendaftar unit-unit itu di sini. Akan ditambahkan ke klausa penggunaan file Pascal yang dihasilkan.Pada halaman ini Anda menentukan platform apa yang ingin Anda targetkan, dan bagaimana Anda ingin mengonfigurasinya.
LIB_MYLIB , sehingga deklarasi berikut akan dihasilkan: const LIB_MYLIB = 'mylib.dll' .Berikutnya adalah kotak centang untuk semua platform yang ingin Anda targetkan (windows 32-bit, windows 64-bit, macOS 32-bit, 64-bit Linux, iOS dan Android). Untuk setiap platform yang Anda periksa, Anda harus memasukkan opsi berikut:
_ yang menggarisbawahi).Di sini Anda dapat menyesuaikan proses parsing dentang.
-D<define> ) dan sertakan jalur pencarian ( -I<path> ). Ada tombol terpisah untuk membuatnya lebih mudah untuk menambahkan ini. Lihat dokumentasi dentang untuk informasi tentang argumen baris perintah yang tersedia.Di sinilah Anda menyesuaikan output yang dihasilkan.
cdecl dan stdcall . Dalam hampir semua kasus, Anda harus menggunakan konvensi panggilan cdecl default. Gunakan stdcall hanya untuk 32-bit Windows DLL yang Anda tahu dikompilasi dengan konvensi panggilan stdcall. Itu biasanya hanya sistem Windows DLL. Sebagian besar pihak ke -3 menggunakan cdecl.char adalah ambigu, dapat digunakan sebagai bilangan bulat 8-bit atau karakter dalam string teks. Versi yang diketik signed char dan unsigned char selalu dikonversi menjadi Shortint dan Byte masing -masing. Tetapi ketika tidak ada penandatanganan yang ditentukan, Anda memiliki opsi berikut:char ke UTF8Char lintas platform.char menjadi Shortint 8-bit yang ditandatangani.char ke Byte 8-bit unsigned.begin dan procedure ). Di sini Anda menentukan bagaimana Anda ingin mengonversi pengidentifikasi ini:public ) sebagai pengidentifikasi di Delphi, tetapi terlihat aneh dan sintrax highlighter Delphi memperlakukan mereka secara berbeda. Jadi Anda biasanya ingin memperlakukan ini sebagai kata -kata yang dipesan juga.type MyEnum = Integer; ) dan buat konstanta untuk setiap opsi dalam enumerasi. Ini mungkin lebih berlaku untuk beberapa perpustakaan.#define , lihat komentar di bawah). Di sini Anda menentukan cara menangani ini:TODO ke kode sumber Delphi, serta versi yang dikomentari dari deklarasi asli. Ingatlah bahwa Anda dapat melihat daftar semua todo di Delphi Ide dengan memilih View | Tool Windows | To-Do List .Perhatikan bahwa hanya komentar dokumentasi gaya doxygen yang diuraikan oleh dentang. Ini adalah komentar yang mengikuti konvensi format ini:
/// 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 mencoba mengkonversi deklarasi #define menjadi konstanta jika memungkinkan. Ini hanya berfungsi jika:
#define ABS(x) (x < 0) ? -x : x tidak dapat diterjemahkan.#define FOO 3<<BAR akan dikonversi menjadi const FOO = 3 shl BAR .Di sini Anda dapat menentukan daftar simbol yang harus diabaikan. Simbol -simbol ini tidak akan diterjemahkan.
Penggunaan yang paling umum adalah mengabaikan #define yang menghasilkan kesalahan konversi, atau fungsi yang tidak Anda butuhkan. Anda juga dapat memilih untuk mengabaikan beberapa jenis, tetapi itu dapat mengakibatkan kesalahan kompilasi nanti karena jenis yang diharapkan hilang.
Perhatikan bahwa simbol sensitif terhadap case.
Halaman terakhir hanya memiliki satu tombol "Run Header Translator" (yang juga dapat Anda aktifkan dengan F9 ). Ini menunjukkan kemajuan proses terjemahan, serta kesalahan yang terjadi saat menguraikan file header.
Anda dapat menggunakan kesalahan ini untuk memperbaiki file header, menambahkan file header yang hilang, atau mengkonfigurasi proses parsing itu dengan menambahkan argumen baris perintah (misalnya, dengan menambahkan jalur pencarian termasuk).
Chet dilisensikan di bawah lisensi BSD yang disederhanakan. Lihat lisensi.txt untuk detailnya.