Вставить luac-байт-код в исходный файл C / C ++ - PullRequest
1 голос
/ 13 марта 2019

Как включить строку lua-bytecode-в файл C / C ++?

$ luac -o test -s test.lua
$ cat test
LuaS�

xV(w@@A@$@&�printTestj

Теперь, если бы вы могли вставить эту байтовую строку в файл C / C ++, вы могли бы на самом деле

luaL_loadfile(lua, bytestring.c_str());

, что делает ненужным загружать test.lua во время выполнения. Вам даже не пришлось бы интерпретировать test.lua во время выполнения, верно?

Обновление:

Первые два комментария к этому вопросу были полезны для генерации строки байтов, чтобы вы могли включить ее в свой код C / C ++. Из этого ответа Я получил эту идею:

xxd -i test > test.h

, который создает это:

unsigned char test[] = {
  0x1b, 0x4c, 0x75, 0x61, 0x53, 0x00, 0x19, 0x93, 0x0d, 0x0a, 0x1a, 0x0a,
  0x04, 0x08, 0x04, 0x08, 0x08, 0x78, 0x56, 0x00, /* ... */, 0x00};
unsigned int test_len = 105;

Это замечательно, но не будет работать с luaL_loadstring , поскольку

Эта функция использует lua_load для загрузки фрагмента в строку с нулем в конце s.

Примечание: в test.

есть нулей .

1 Ответ

2 голосов
/ 13 марта 2019

Используйте luaL_loadbuffer вместо luaL_loadstring :

luaL_loadbuffer(L,test,test_len,"");
...