我发现踩完坑,编译完。。 之后我就忘记了。
把尽可能记得的有点用的东西记录下把
· debug方案
· 参考文献
1.C++如何和lua交互
1.2.1Pushing Elements
展开源码
void lua_pushnil (lua_State *L);
void lua_pushboolean (lua_State *L, int bool);
void lua_pushnumber (lua_State *L, double n);
void lua_pushlstring (lua_State *L, const char *s, size_t length);
void lua_pushstring (lua_State *L, const char *s); // 压入字符串,使用strlen自动计算长度
1.2.2 Querying Elements
int lua_is... (lua_State *L, int index);
注意:`lua_to***`系列函数只是读取栈内的内容,并不会修改栈的内容
展开源码
int lua_toboolean (lua_State *L, int index);
double lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);
size_t lua_strlen (lua_State *L, int index);
-----
lua_CFunction lua_tocfunction (lua_State *L, int index); // 把给定索引处的 Lua 值转换为一个 C 函数。 这个值必须是一个 C 函数;如果不是就返回 NULL 。
const void *lua_topointer (lua_State *L, int index); //把给定索引处的值转换为一般的 C 指针 (void*) 。 这个值可以 userdata ,table ,thread 或是一个 function ; 否则,lua_topointer 返回 NULL
void *lua_touserdata (lua_State *L, int index); //如果索引处的值是完整的 userdata ,返回内存块的地址。 如果值是一个 light userdata ,那么就返回它表示的指针。 否则返回 NULL 。
1.2.3 Other Stack Operations
int lua_gettop (lua_State *L); // 该函数返回当前lua状态栈的大小
void lua_settop (lua_State *L, int index); // 设置index位置为栈顶,多余元素被干掉,出现空缺的话补nil
void lua_pushvalue (lua_State *L, int index); // 把index处值的副本压入栈顶
void lua_remove (lua_State *L, int index); // 移除index处的值,上面的元素下移一位
void lua_insert (lua_State *L, int index); //在index处插入栈顶元素,其上的元素上移一位
void lua_replace (lua_State *L, int index); //把栈顶元素设置到index处,原值被覆盖
void lua_pop(lua_State* lua, int count)宏,从栈中弹出count个元素,等价于lua_settop(lua, -1 - count)
--
int lua_is***(lua_State* lua, int index) 判断lua栈中index位置的元素是否是***, 同上,不再枚举
int lua_type(lua_State* lua, int index) 返回index位置元素的类型,具体取值范围请参见lua.h, 如LUA_TNUMBER
const char* lua_typename(lua_State* lua, int type) // 返回type常量对应的元素类型名称
|
c |
lua |
nil |
无 |
{value=0, tt = t_nil} |
boolean |
int 非0, 0 |
{value=非0/0, tt = t_boolean} |
number |
int/float等 1.5 |
{value=1.5, tt = t_number} |
lightuserdata |
void*, int*, 各种* point |
{value=point, tt = t_lightuserdata} |
string |
char str[] |
{value=gco, tt = t_string} gco=TString obj |
table |
无 |
{value=gco, tt = t_table} gco=Table obj |
userdata |
无 |
{value=gco, tt = t_udata} gco=Udata obj |
closure |
无 |
{value=gco, tt = t_function} gco=Closure obj |
http://gamedevgeek.com/tutorials/calling-c-functions-from-lua/
http://acamara.es/blog/2012/08/calling-c-functions-from-lua-5-2/
https://www.cnblogs.com/sevenyuan/p/4511808.html