2011-09-04 37 views
6

Tôi muốn biết có cách nào để truyền con trỏ cấu trúc đến tập lệnh lua, và tiếp cận thành viên của nó từ lua mà không sao chép (cho mục đích đọc và ghi).Chuyển con trỏ cấu trúc C sang tập lệnh lua

Vì vậy, ví dụ: có thể ghi đè lên một thành viên của cấu trúc c trực tiếp thông qua con trỏ của nó không?

(Tôi đang sử dụng luajit)

Trả lời

5

Xem như bạn đã gắn thẻ cho luajit, bạn có thể kết hợp ánh xạ userdata (như đã đề cập bởi người khác) với FFI để truy cập cấu trúc trực tiếp, xem hướng dẫn tại đây: http://luajit.org/ext_ffi_tutorial.html

+0

Ồ, wow. Tôi không biết về điều này. Điều này chắc chắn là con đường để đi nếu bạn đang sử dụng luajit. –

1

Cách để thực hiện điều này là với dữ liệu người dùng lua. Dưới đây là một vài ví dụ: link, another link.

6

Ngoài câu trả lời của Tim, bạn cũng có thể sử dụng ánh sáng userdata. Bạn không kết thúc với một bản sao của dữ liệu của bạn trong ngăn xếp Lua, tất cả các bạn đẩy vào Lua là một con trỏ.

Lua không hiểu gì trong con trỏ này, cho dù nó vẫn trỏ tới bộ nhớ hợp lệ hay cách truy cập bất kỳ đối tượng nào trong con trỏ này, vì vậy bạn sẽ phải tự mình xử lý tất cả điều này trong C. gửi một con trỏ tới một mục trên danh sách, vì vậy nếu có bất kỳ rủi ro nào mà mục nhập đã bị xóa khỏi danh sách, trước tiên tôi lặp lại danh sách để xác nhận con trỏ (không phải là một vấn đề lớn nếu danh sách của bạn ngắn). Để truy cập các mục trong con trỏ trong Lua, bạn cần viết các hàm get/set trong C mà bạn có thể gọi từ Lua.

Để bắt đầu, đây là những mục trên đẩy và lấy các lightuserdata:

Các vấn đề liên quan