Цитата |
---|
Алексей написал: Quik, скорее всего, перед вызовом пользовательских колбеков проверяет, чтобы в переменной (с зарезервированным именем колбека) хранилась ссылка именно на функцию. В вашей реализации получается, что в переменной с зарезервированном именем OnInit хранится ссылка на таблицу. Вот Quik ее и не вызывает. Что Вам мешает сделать просто OnI nit = a? |
Пример только для проверки метатаблиц. Написал чтоб упростить вопрос.
Берем любую c-функцию(любая сигнатура). Создаем объект-обертку для нее на userdata.
К userdata добавляем метатаблицу с __call чтоб луа мог вызывать функцию(обычную int(lua_state*) в которой идет вызов обертки и далее уже нормальной функции.
Ну и __gc для ручного вызова деструктора у объекта-обертки.
Есть и другие варианты, через lightuserdata например. но тогда приходится в dll придется хранить список с указателями на эти обертки и чистить при выгрузке.
Вопщем я думал вариант с userdata и метатаблицами вполне стандартная возможность lua и странно что в qlua для колбеков это делать нельзя.
Я не так давно разбираюсь с этим языком, возможно я тут вообще не прав и нельзя какие то базовые функции так переопределять.(поправте если кто вкурсе, s_mike например говорит что это именно в qlua так)
Временно сделал конешно по другому но хотелось бы прояснить, это моя недоработка или в qlua.