ctypes เป็นไลบรารีสำหรับเชื่อมโยงกับไลบรารี C โดยใช้ OCaml ล้วนๆ จุดมุ่งหมายหลักคือเพื่อให้การเขียนส่วนขยาย C ตรงไปตรงมาที่สุด
แกนกลางของ ctypes คือชุดตัวรวมสำหรับอธิบายโครงสร้างของประเภท C ได้แก่ ประเภทตัวเลข อาร์เรย์ พอยน์เตอร์ โครงสร้าง สหภาพ และฟังก์ชัน คุณสามารถใช้ตัวรวมเหล่านี้เพื่ออธิบายประเภทของฟังก์ชันที่คุณต้องการเรียกใช้ จากนั้นผูกเข้ากับฟังก์ชันเหล่านั้นโดยตรง โดยไม่ต้องเขียนหรือสร้าง C!
สมมติว่าคุณต้องการผูกกับฟังก์ชัน C ต่อไปนี้:
int sigemptyset ( sigset_t * set );
int sigfillset ( sigset_t * set );
int sigaddset ( sigset_t * set , int signum );
int sigdelset ( sigset_t * set , int signum );
int sigismember ( const sigset_t * set , int signum );
การใช้ ctypes คุณสามารถอธิบายอินเทอร์เฟซสำหรับฟังก์ชันเหล่านี้ได้ดังนี้:
let sigemptyset = foreign " sigemptyset " (ptr sigset_t @-> returning int )
let sigfillset = foreign " sigfillset " (ptr sigset_t @-> returning int )
let sigaddset = foreign " sigaddset " (ptr sigset_t @-> int @-> returning int )
let sigdelset = foreign " sigdelset " (ptr sigset_t @-> int @-> returning int )
let sigismember = foreign " sigismember " (ptr sigset_t @-> int @-> returning int )
ชื่อที่ผูกมัดด้วยรหัสนี้มีประเภทที่คุณอาจคาดหวัง:
val sigemptyset : sigset_t ptr -> int
val sigfillset : sigset_t ptr -> int
val sigaddset : sigset_t ptr -> int -> int
val sigdelset : sigset_t ptr -> int -> int
val sigismember : sigset_t ptr -> int -> int
นั่นคือทั้งหมดที่มีให้มัน ต่างจากวิธีการเขียนส่วนขยาย C แบบปกติตรงที่ไม่มีฟังก์ชัน "stub" ของ C ให้เขียน ดังนั้นจึงมีโอกาสเกิดข้อผิดพลาดน้อยกว่ามาก
เอกสารประกอบและการแจกแจงแหล่งที่มามีตัวอย่างที่ซับซ้อนมากขึ้น ซึ่งเกี่ยวข้องกับโครงสร้าง สหภาพ อาร์เรย์ ฟังก์ชันเรียกกลับ และอื่นๆ และแสดงวิธีสร้างและใช้ค่า C (เช่น อินสแตนซ์ของ sigset_t ptr
) ใน OCaml
Cstubs_structs
เพื่อกำหนดโครงร่างข้อมูลได้อย่างน่าเชื่อถือ