Skip to content
เข้าสู่ระบบ

FFI

ถึง Rust จะเก่งแค่ไหน แต่โลกนี้ก็ยังเต็มไปด้วยโค้ดภาษา C/C++ ครับ FFI คือวิธีที่ Rust ใช้คุยกับภาษาอื่น (โดยเฉพาะ C)

ลองนึกภาพว่าเราอยากใช้ library C ที่พัฒนามา 30 ปี หรืออยากให้ C program เรียกใช้ Rust code ที่เราเขียน FFI คือสะพานที่เชื่อมโลกทั้งสองเข้าด้วยกัน!

// ============================================
// extern "C" block
// ประกาศ functions ที่อยู่ใน C library
// Rust สามารถเรียกใช้ได้
// ============================================
extern "C" {
// ============================================
// abs() จาก C standard library
// รับ i32 คืน i32 (absolute value)
// ============================================
fn abs(input: i32) -> i32;
// ============================================
// sqrt() จาก math library
// รับ f64 คืน f64 (square root)
// ============================================
fn sqrt(x: f64) -> f64;
// ============================================
// strlen() วัดความยาว C string
// รับ pointer คืน usize
// ============================================
fn strlen(s: *const i8) -> usize;
}
fn main() {
// ============================================
// ต้องใช้ unsafe เพราะ Rust ไม่รู้ว่า
// C function ทำอะไร อาจจะ crash ได้!
// ============================================
unsafe {
// เรียก abs จาก C
let result = abs(-42);
println!("abs(-42) = {}", result); // 42
// เรียก sqrt จาก C
let root = sqrt(16.0);
println!("sqrt(16.0) = {}", root); // 4.0
}
}

เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม

ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด