我尝试了一些运行Lua代码的尝试,并像这样通过C/C++
运行槽时检索了它的值,但是我的应用程序由于分段错误而崩溃。
例如。访问不正确属于我的内存:
到目前为止,我明白了。使用Lua解释器的简单过程:
a = {5}
local Cnt1 = 0
local Cnt2 = 0
while true do
Cnt2 = Cnt2 + 1
if(Cnt2 == 100000000) then
Cnt2 = 0
print("Irer: "..Cnt1.." Address: "..tostring(a).." Value: "..a[1])
Cnt1 = Cnt1 + 1
end
end
无限循环实际上是用于使进程唤醒和表地址保持恒定。
如您所见,我打印了“a”的地址,然后将其从控制台本身复制粘贴到C(代码块)中。之后,我编写了另一个程序,在其中将指针硬编码为内存映射,如下所示:
unsigned char *p = (unsigned char *)0x78C070;
printf("Value: %u",*p);
return 0;
可能的方法是
1)我可以尝试的方法是文件,但是它确实很慢(HDD)
2)将文件放在ram磁盘上-快速,但并非每个人都有ram磁盘。
最佳答案
创建一个C包装程序,并使用Lua C API检索值。这是一个应检索“a”的示例。没有错误处理,但希望您能理解。
lua_State *L = sys_lua_L();
luaL_loadfile(L, "your_lua_script.lua");
lua_pcall(L, 0, 0, 0);
lua_getglobal(L, "a"); // retrieve lua variable a
lua_rawgeti(L, -1, 1); // assumes "a" is a table
int val = lua_tointegerL, -1);
printf("%d\n", val);