พื้นฐาน FFI: ffi.cdef และ ffi.load
ประกาศชนิดข้อมูล C และโหลดไลบรารีที่ใช้ร่วมกันด้วยมอดูล ffi ของ LuaJIT
พื้นฐาน FFI: ffi.cdef และ ffi.load เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
FFI คืออะไร
FFI (Foreign Function Interface) ของ LuaJIT ช่วยให้คุณเรียกใช้ฟังก์ชันของไลบรารี C และใช้โครงสร้างข้อมูลของ C ได้โดยตรงจาก Lua โดยไม่ต้องเขียนโค้ดตัวห่อหุ้ม C
การเรียกใช้ FFI
โหลดไลบรารี FFI ด้วย require("ffi") ไลบรารีนี้มีอยู่ใน LuaJIT และไม่มีใน PUC Lua มาตรฐาน
local ffi = require("ffi")ffi.cdef: การประกาศชนิดข้อมูลของ C
ffi.cdef(cDeclarations) แยกวิเคราะห์การประกาศของ C และทำให้ชนิดข้อมูลกับลายเซ็นฟังก์ชันพร้อมใช้งานสำหรับ FFI โดยไม่มีการคอมไพล์โค้ดจริง มีเพียงข้อมูลชนิดข้อมูลเท่านั้น
ffi.cdef[[
int printf(const char *fmt, ...);
double sqrt(double x);
typedef struct { int x; int y; } Point;
]]ffi.load: การโหลดไลบรารีที่ใช้ร่วมกัน
ffi.load(libname) โหลดไลบรารีที่ใช้ร่วมกันและคืนออบเจ็กต์ซึ่งฟิลด์ต่าง ๆ คือฟังก์ชัน C ที่ประกาศไว้
local C = ffi.C -- access to libc on POSIX
local m = ffi.load("m") -- libm
print(m.sqrt(2.0)) -- 1.414...การเข้าถึงฟังก์ชัน libc โดยตรง
บนระบบ POSIX ffi.C ให้คุณเข้าถึงฟังก์ชันทั้งหมดของไลบรารี C มาตรฐานได้โดยไม่ต้องโหลดอย่างชัดเจน
ffi.cdef[[ int puts(const char *s); ]]
ffi.C.puts("Hello from C!")เส้นทางของ ffi.load
ส่งเส้นทางเต็มหรือชื่อไลบรารีมาตรฐาน บน Linux ให้ใช้ "m" สำหรับ libm.so และ "pthread" สำหรับ pthreads เป็นต้น
การประกาศโครงสร้าง
ประกาศโครงสร้าง C ใน cdef จากนั้นจัดสรรและเข้าถึงโครงสร้างเหล่านั้นจาก Lua
ffi.cdef[[
typedef struct { float x, y, z; } Vec3;
]]
local v = ffi.new("Vec3", {1, 2, 3})
print(v.x, v.y, v.z) -- 1.0 2.0 3.0คำอธิบายชนิดข้อมูลและตัวระบุคุณสมบัติ
cdef รองรับ const, unsigned, int32_t, uint64_t และชนิดข้อมูล C มาตรฐานอื่น ๆ
การเรียกใช้ cdef หลายครั้ง
คุณสามารถเรียก ffi.cdef ได้หลายครั้ง การประกาศซ้ำจะถูกละเว้น โดยทั่วไปควรจัดระเบียบตามไลบรารี
ความแตกต่างระหว่างแพลตฟอร์ม
รูปแบบการจัดวางโครงสร้างและลายเซ็นฟังก์ชันอาจแตกต่างกันตามแพลตฟอร์ม เช่น Windows กับ Linux หรือ 32 บิตกับ 64 บิต ใช้ ffi.os และ ffi.arch เพื่อประกาศลายเซ็นที่ถูกต้องตามเงื่อนไข
ข้อควรระวังด้านความปลอดภัย
FFI ข้ามการตรวจสอบความปลอดภัยของชนิดข้อมูลใน Lua การประกาศ C ที่ไม่ถูกต้องอาจทำให้หน่วยความจำเสียหาย โปรแกรมหยุดทำงานจากการเข้าถึงหน่วยความจำผิดพลาด หรือเกิดพฤติกรรมที่ไม่กำหนดไว้ ตรวจสอบการประกาศกับส่วนหัว C จริงเสมอ
คำถามพื้นฐานเกี่ยวกับ FFI
ffi.cdef ทำหน้าที่อะไร
สรุป: พื้นฐาน FFI
ใช้ ffi.cdef เพื่อประกาศชนิดข้อมูลหรือฟังก์ชัน C และใช้ ffi.load เพื่อโหลดไลบรารีที่ใช้ร่วมกัน ffi.C ให้การเข้าถึง libc โดยตรง ตรวจสอบเสมอว่าการประกาศตรงกับส่วนหัว C จริง เพื่อป้องกันหน่วยความจำเสียหาย
เรียนรู้ Lua ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 40
- บทเรียน
- 159
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน FFI: ffi.cdef และ ffi.load” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน FFI: ffi.cdef และ ffi.load” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน FFI: ffi.cdef และ ffi.load”
ประกาศชนิดข้อมูล C และโหลดไลบรารีที่ใช้ร่วมกันด้วยมอดูล ffi ของ LuaJIT คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน FFI: ffi.cdef และ ffi.load” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน FFI: ffi.cdef และ ffi.load
- การเรียกฟังก์ชัน C ผ่าน FFI
- พอยน์เตอร์ โครงสร้าง และอาร์เรย์ใน FFI
- ฟังก์ชันเรียกกลับ: การส่งฟังก์ชัน Lua ให้ C