Чтобы вызвать метод у таблицы, к примеру метод Size() у таблицы CreateDataSource - нужно сделать так:
Код
//index - номер таблицы в стеке Lua
lua_getfield(L, index, "Size"); //"Извлекаем" из "таблицы" функцию отвечающую за возвращения размера этой таблицы.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 1, 1, 0); //Вызываем функцию Size
Quikos, Скажите, что я ошибаюсь, но у меня складывается впечатление, что Вы кроме форума больше ничего не изучали по программированию на Си и Lua. Я прав?
nikolz написал: Quikos , Скажите, что я ошибаюсь, но у меня складывается впечатление, что Вы кроме форума больше ничего не изучали по программированию на Си и Lua. Я прав?
Quikos, Не понимаю, что Вы, собственно, хотите. to call a string value? Для программирования данными я лично использую функцию load, и только для того, чтобы держать некоторые куски кода во внешних файлах. Вызывать строку как функцию здесь, кажется, не пробовал, но в JS частенько этим пользовался, иногда даже сооружая код этой функции (в смысле, строки) на лету. Скорее всего, это должно работать и в Lua.
Владимир написал: Quikos, Не понимаю, что Вы, собственно, хотите. to call a string value? Для программирования данными я лично использую функцию load, и только для того, чтобы держать некоторые куски кода во внешних файлах. Вызывать строку как функцию здесь, кажется, не пробовал, но в JS частенько этим пользовался, иногда даже сооружая код этой функции (в смысле, строки) на лету. Скорее всего, это должно работать и в Lua.
В первом сдучае я вызываю метод Size() у таблицы CreateDataSource - только делаю в Lua C API - как показал в самом первом сообщении - и это работает.
Теперь мне нужно сделать "то же самое" - но только вызвать не метод у таблицы, а стркоове поле у таблицы возвращенной функцией getQuoteLevel2 - сделать нужно всев том же Lua C API - и вот аналогичный метод с вызовом метода Size() - уже не работает, видимо строковое поле таблицы нужно, как то по другому доставать из таблицы.
Quikos, Я не знаю, что там за поле CreateDataSource - этим говном я никогда не пользовался и другим не советую. И пишу только на чистом луа - никаких API. Если Вам нужно вызвать строку - насрать, в какой таблице или переменной она лежит или является возвращаемым значением - попробуйте через load.
Владимир написал: Quikos, Я не знаю, что там за поле CreateDataSource - этим говном я никогда не пользовался и другим не советую. И пишу только на чистом луа - никаких API. Если Вам нужно вызвать строку - насрать, в какой таблице или переменной она лежит или является возвращаемым значением - попробуйте через load.
Quikos, Функция здешняя. Насколько я помню, недокументированная. for l in F:lines() do s=l:sub(1,1); if s=="_" then load(l:sub(2))();end; end; Т.е. если строка в файле начинается с символа подчёркивания, скрипт выполняет её как если бы она была набита прямо в коде. Этим способом я сообщаю скрипту номер счёта, код клиента, количество денег, который ему разрешено использовать и т.д.
Владимир написал: Quikos, Функция здешняя. Насколько я помню, недокументированная. for l in F:lines() do s=l:sub(1,1); if s=="_" then load(l:sub(2))();end; end; Т.е. если строка в файле начинается с символа подчёркивания, скрипт выполняет её как если бы она была набита прямо в коде. Этим способом я сообщаю скрипту номер счёта, код клиента, количество денег, который ему разрешено использовать и т.д.
1)Так это не Lua C api.
2)Использовать недокументированные функции - чтобы получить недокументированный результат ? Это странно.
2) А что делать прикажете? Язык - полное говно, и это единственная возможность программирования данными. В одном из самых первых своих постов я писал: УХ ТЫ! А в описании языка (руководство пользователя) нет ни звука ни про unpack, ни про loadstring! А эти вещи, как я предполагаю, должны бы расширять функциональные возможности совершенно диким образом!