如何使用Luacneneneba API正确读取字符串和表参数
How to properly read string and table arguments with Lua c API?
我花了几个小时试图让它发挥作用,但没有成功。我有一个C++程序,它的功能暴露在Lua脚本中。Lua脚本这样使用它:
setData('type', {a=1, b=2, c=3})
所以第一个参数是字符串,第二个是表。
我当前最好的C++setData函数版本如下:
string sType;
map<string, uint8_t> mOptions;
int nArgs = lua_gettop(i_pState);
if (nArgs == 2)
{
if (lua_isstring(i_pState, 1) != 0)
sType = lua_tostring(i_pState, 1);
if (lua_istable(i_pState, 2) != 0)
{
lua_pushnil(i_pState);
while(lua_next(i_pState, 2))
{
uint8_t nValue = uint8_t(lua_tonumber(i_pState, -1));
string sKey = lua_tostring(i_pState, -2);
mOptions[sKey] = nValue;
lua_pop(i_pState, 1);
}
lua_pop(i_pState, 1);
}
}
return 0;
它工作正常,但在调用lua_close()
函数时,会在结束时导致"program.exe已触发断点"错误。这个代码出了什么问题?
UPD1。如果不处理第二个参数,我不会出错。
UPD2.我的代码行为非常奇怪。我认为这可能是混合extern "C"
和C++代码的问题。
UPD3。原来这是堆损坏。我不明白原因在哪里。也许这与lua根本没有关系。
终于来了!将Lua代码重新编译为C++代码不起作用(积极的一面是我再也不用担心extern "C"
了(。但我发现了两个多余的lua_pop()
呼叫。我去掉了它们,现在效果很好。
我没想到卢会这么危险
相关文章:
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 对函数的 out 字符串参数使用 swap 与赋值
- sscanf() 有两个字符串参数
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 如何通过C++在Python函数中传递字符串参数
- 将字符串参数传递给 ifstream
- Pybind11:将字符串*参数传递给构造函数
- 为什么我不能提供一个字符串参数来打印 ncurses?
- 为什么将char*传递给字符串参数会产生汇编错误
- 字符串参数常量字符* 和常量 wchar_t*
- 无法将字符串参数传递到构造函数中?
- 为什么对字符串参数的常量引用可以采用字符串文字?
- C 中的模板专业化中的字符串参数
- 如何使用单声道嵌入将字符串参数传递给 c# 方法
- 如何检查谷歌模拟中作为空指针传递的字符串参数
- 向 const 字符串参数发送 0 int 文本时的访问冲突
- 构造函数字符串参数未设置窗口标题
- C++ 重构采用 int 或字符串参数的方法
- 调用具有字符串参数direct vs variable的函数
- 如何使用 2 个字符串参数从 jni java 库调用