Передача указателя структуры C на скрипт lua - PullRequest
6 голосов
/ 04 сентября 2011

Я хотел бы знать, есть ли способ передать указатель структуры на скрипт lua, и получить доступ к своим членам из lua без копирования (для чтения и записи).

Так, например, возможно ли перезаписать элемент структуры c непосредственно через его указатель?

(я использую luajit)

Ответы [ 3 ]

6 голосов
/ 04 сентября 2011

В дополнение к ответу Тима вы также можете выбрать light userdata. Вы не получите копию своих данных в стеке Lua, все, что вы нажимаете на Lua, это указатель.

Lua не понимает, что находится в этом указателе, указывает ли он на действительную память или как получить доступ к любым объектам в этом указателе, поэтому вам придется обрабатывать все это самостоятельно в C. Обычно я отправляю указатель на элемент в списке, так что, если есть риск, что запись была удалена из списка, я сначала перебираю список, чтобы проверить указатель (не так уж и много, если ваши списки короткие). Чтобы получить доступ к элементам внутри указателя в Lua, вам нужно написать функции get / set в C, которые вы можете вызывать из Lua.

Чтобы начать, вот записи о получении и получении данных lightuserdata:

5 голосов
/ 04 сентября 2011

Поскольку вы пометили это как luajit, вы можете объединить легкие пользовательские данные (как уже упоминалось) с FFI для прямого доступа к элементу структуры, см. Учебное пособие здесь: http://luajit.org/ext_ffi_tutorial.html

1 голос
/ 04 сентября 2011

Способ сделать это с помощью пользовательских данных lua. Вот пара примеров: ссылка , другая ссылка .

...