Chet เป็นนักแปล .h-to-.pas ขับเคลื่อนโดย libclang สำหรับ Delphi
ซึ่งแตกต่างจากนักแปลส่วนหัวอื่น ๆ Chet ใช้คอมไพเลอร์ Clang เพื่อแยกวิเคราะห์ไฟล์ส่วนหัวทำให้เกิดการแปลที่แม่นยำยิ่งขึ้นซึ่งต้องมีการปรับเปลี่ยนด้วยตนเองน้อยลง
คุณสมบัติที่โดดเด่นบางอย่างคือ:
#define ประกาศเป็นค่าคงที่หากเป็นไปได้.pas เดียวสำหรับไดเรกทอรีทั้งหมดของไฟล์. .h สิ่งนี้จะช่วยลดปัญหาเนื่องจากการพึ่งพาระหว่างไฟล์ส่วนหัว.chet เพื่อนำกลับมาใช้ใหม่ #ifdef เงื่อนไข นี่คือทั้งดีและไม่ดี มันดีเพราะช่วยปรับปรุงความแม่นยำในการแปลง แต่มันอาจจะไม่ดีเพราะใช้ระบบที่ Chet ทำงานเพื่อกำหนดเส้นทางที่มีเงื่อนไขบางอย่าง ตัวอย่างเช่นเนื่องจาก CHET ทำงานบน Windows มันจะแยกวิเคราะห์รหัสใน #ifdef _WIN32 ส่วน แต่ข้ามรหัสใด ๆ ในส่วนสำหรับแพลตฟอร์มอื่น ๆ เนื่องจาก Chet ใช้คอมไพเลอร์จริงคุณจะต้องมีการพัฒนาสภาพแวดล้อม (น้อยที่สุด) C ที่ติดตั้งรวมถึง LLVM กับเสียงดัง เสียงดังจะต้องสามารถค้นหาส่วนหัวของระบบสำหรับสภาพแวดล้อมการพัฒนา โดยปกติแล้วสิ่งเหล่านี้จะพร้อมใช้งานหากคุณมี Visual Studio บางรุ่นที่ติดตั้ง Visual C ++ Visual Studio ฉบับฟรี (ชุมชน) พอเพียง
คุณสามารถเรียกใช้ Chet ก่อนเพื่อตรวจสอบข้อผิดพลาดใด ๆ ที่เกี่ยวข้องกับการพึ่งพาที่ขาดหายไป หากคุณได้รับข้อผิดพลาดในการพึ่งพาเมื่อเรียกใช้นักแปลคุณสามารถดาวน์โหลดการอ้างอิงได้ที่นี่:
คุณสามารถใช้แอปพลิเคชัน Windows Chet 64 บิตที่คอมไพล์ไว้ล่วงหน้าในไดเรกทอรี Bin
หากคุณต้องการรวบรวม Chet ด้วยตัวเองคุณต้องใช้ libclang สำหรับ Delphi และตรวจสอบให้แน่ใจว่า Delphi IDE สามารถค้นหาได้ (โครงการ Chet จะพบโดยอัตโนมัติหากไดเรกทอรี Neslib.Clang อยู่ในระดับเดียวกับไดเรกทอรี Chet )
ขอบคุณสำหรับผลงานเหล่านี้:
เชตค่อนข้างตรงไปตรงมา ในหลายกรณีคุณจะต้องจัดเตรียมไดเรกทอรีที่มีไฟล์ส่วนหัวชื่อของไฟล์ .pas และเลือก "เรียกใช้ส่วนหัวนักแปล (F9)"
สำหรับการควบคุมกระบวนการแปลงเพิ่มเติมคุณสามารถระบุตัวเลือกต่าง ๆ ที่อธิบายไว้ด้านล่าง

ตัวเลือกการกำหนดค่าใด ๆ ที่คุณตั้งค่าสามารถบันทึกไว้ในไฟล์การกำหนดค่า .chet (ซึ่งเป็นไฟล์ ini-file ที่เรียบง่าย) สิ่งนี้ช่วยให้คุณสามารถโหลดการตั้งค่าในภายหลังเพื่อเรียกใช้การแปลงใหม่ (ตัวอย่างเช่นเมื่อไฟล์ส่วนหัวเวอร์ชันใหม่ได้รับการเผยแพร่) คุณสามารถโหลดและบันทึกตัวเลือกการกำหนดค่าเหล่านี้โดยใช้เมนู File
หากต้องการช่วยกำหนดค่าล่วงหน้าการตั้งค่าบางอย่างสำหรับเซสชันใหม่ให้เลือก File | New Project... (Ctrl+N) คุณป้อนชื่อของโครงการและ Chet จะกำหนดค่าการตั้งค่าบางอย่างตามชื่อที่คุณป้อน (แม้ว่าคุณจะสามารถแก้ไขการตั้งค่าเหล่านั้นได้ในภายหลัง)
เมนู Run เช่นเดียวกับ Run Header Translator ซึ่งคุณสามารถเปิดใช้งานด้วย F9
หน้าโครงการมีตัวเลือกการกำหนดค่าที่สำคัญที่สุด:
.h ที่มาที่นี่ ไดเรกทอรีอาจสัมพันธ์กับไดเรกทอรีที่มีไฟล์. .chet Project คลิกปุ่ม ... เพื่อเรียกดูไดเรกทอรี ขอแนะนำให้คุณไม่ใช้ไดเรกทอรีกับซอร์สโค้ด C ดั้งเดิม ให้คัดลอกไฟล์ส่วนหัวไปยังไดเรกทอรีแยกต่างหากเพื่อวัตถุประสงค์ในการแปลง สิ่งนี้ทำให้ง่ายต่อการลบไฟล์ส่วนหัวที่คุณไม่ต้องการแปลงหรือทำการแก้ไขเป็นไฟล์ส่วนหัวเพื่อวัตถุประสงค์ในการแปลง.pas ที่จะสร้างขึ้น ฉันไฟล์ Pascal แบบรวมเดียวจะถูกสร้างขึ้นสำหรับไฟล์ส่วนหัวที่แยกวิเคราะห์ทั้งหมด ชื่ออาจสัมพันธ์กับไดเรกทอรีที่มีไฟล์ .chet Project คลิกปุ่ม ... เพื่อเปิดกล่องโต้ตอบบันทึกWindows.Winapi ) คุณสามารถแสดงรายการหน่วยเหล่านั้นได้ที่นี่ จะถูกเพิ่มเข้าไปในประโยคการใช้งานของไฟล์ Pascal ที่สร้างขึ้นในหน้านี้คุณระบุแพลตฟอร์มที่คุณต้องการกำหนดเป้าหมายและวิธีที่คุณต้องการกำหนดค่า
LIB_MYLIB ดังนั้นการประกาศต่อไปนี้จะถูกสร้างขึ้น: const LIB_MYLIB = 'mylib.dll'ถัดไปคือช่องทำเครื่องหมายสำหรับทุกแพลตฟอร์มที่คุณต้องการกำหนดเป้าหมาย (หน้าต่าง 32 บิต, Windows 64 บิต, MacOS 32 บิต, Linux 64 บิต, iOS และ Android) สำหรับแต่ละแพลตฟอร์มที่คุณตรวจสอบคุณต้องป้อนตัวเลือกต่อไปนี้:
_ )ที่นี่คุณสามารถปรับแต่งกระบวนการแยกวิเคราะห์เสียงดัง
-D<define> ) และรวมเส้นทางการค้นหา ( -I<path> ) มีปุ่มแยกต่างหากเพื่อให้ง่ายต่อการเพิ่มสิ่งเหล่านี้ อ้างถึงเอกสาร Clang สำหรับข้อมูลเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งที่มีอยู่นี่คือที่ที่คุณปรับแต่งผลลัพธ์ที่สร้างขึ้น
cdecl และ stdcall ในเกือบทุกกรณีคุณควรใช้การประชุมการเรียก cdecl เริ่มต้น ใช้ stdcall สำหรับ Windows DLL 32 บิตเท่านั้นซึ่งคุณรู้ว่ารวบรวมด้วยการประชุมการเรียก STDCALL โดยปกติแล้วจะเป็นเพียงระบบ Windows DLL เท่านั้น DLL ของบุคคลที่สามส่วนใหญ่ใช้ CDECLchar นั้นไม่ชัดเจนมันสามารถใช้เป็นจำนวนเต็ม 8 บิตหรืออักขระในสตริงข้อความ เวอร์ชันพิมพ์ signed char และ unsigned char จะถูกแปลงเป็น Shortint และ Byte ตามลำดับเสมอ แต่เมื่อไม่มีการระบุการลงนามคุณมีตัวเลือกต่อไปนี้:char เป็น Cross-Platform UTF8Charchar เป็น 8 บิต Shortint นามchar เป็น Byte ที่ไม่ได้ลงชื่อ 8 บิตbegin และ procedure ) ที่นี่คุณระบุวิธีที่คุณต้องการแปลงตัวระบุเหล่านี้:public ) เป็นตัวระบุใน Delphi แต่มันดูแปลกและปากกาเน้นข้อความไวยากรณ์ของ Delphi ปฏิบัติต่อพวกเขาแตกต่างกัน ดังนั้นคุณมักจะต้องการปฏิบัติต่อสิ่งเหล่านี้เป็นคำที่สงวนไว้เช่นกันtype MyEnum = Integer; ) และสร้างค่าคงที่สำหรับแต่ละตัวเลือกในการแจงนับ สิ่งนี้อาจมีผลบังคับใช้มากขึ้นสำหรับห้องสมุดบางแห่ง#define 'ดูข้อสังเกตด้านล่าง) ที่นี่คุณระบุวิธีจัดการสิ่งเหล่านี้:TODO ไปยังซอร์สโค้ด Delphi รวมถึงเวอร์ชันแสดงความคิดเห็นของการประกาศดั้งเดิม โปรดจำไว้ว่าคุณสามารถดูรายการสิ่งที่ต้องทำทั้งหมดใน Delphi IDE ได้โดยเลือก View | Tool Windows | To-Do Listโปรดทราบว่ามีเพียงความคิดเห็นของเอกสารสไตล์ Doxygen เท่านั้นที่แยกวิเคราะห์โดย Clang นี่คือความคิดเห็นที่ติดตามการประชุมรูปแบบใด ๆ เหล่านี้:
/// 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 ) มันแสดงความคืบหน้าของกระบวนการแปลรวมถึงข้อผิดพลาดใด ๆ ที่เกิดขึ้นในขณะที่แยกวิเคราะห์ไฟล์ส่วนหัว
คุณสามารถใช้ข้อผิดพลาดเหล่านี้เพื่อแก้ไขไฟล์ส่วนหัวเพิ่มไฟล์ส่วนหัวที่หายไปหรือกำหนดค่ากระบวนการแยกวิเคราะห์โดยการเพิ่มอาร์กิวเมนต์บรรทัดคำสั่ง (ตัวอย่างเช่นโดยการเพิ่มรวมพา ธ การค้นหา)
Chet ได้รับใบอนุญาตภายใต้ใบอนุญาต BSD ที่เรียบง่าย ดู License.txt สำหรับรายละเอียด