【发布时间】:2020-04-05 09:16:40
【问题描述】:
我有一个指向用户数据的指针地址。我这样检索地址:
*(uint32_t*)lua_touserdata(L, -1)
稍后,我想使用指针将该用户数据推回堆栈顶部。如果可以的话,应该怎么做?
【问题讨论】:
-
如果你想存储一个用户数据的引用,以便以后可以将它推回 Lua 堆栈,我建议使用函数
luaL_ref和luaL_unref。
我有一个指向用户数据的指针地址。我这样检索地址:
*(uint32_t*)lua_touserdata(L, -1)
稍后,我想使用指针将该用户数据推回堆栈顶部。如果可以的话,应该怎么做?
【问题讨论】:
luaL_ref 和 luaL_unref。
您可以在检索到指向您已通过 lua_newuserdata() 创建的用户数据的指针后创建新的用户数据。然后将指针的基础值设置为第一个 userdata 的基础值的值。它应该看起来像这样:
int *ud1 = lua_touserdata( L, -1 ); // Get userdata previously created
int *ud2 = lua_newuserdata( L, sizeof( int ) ); // Create new userdata
*ud2 = *ud1; // Set value of new userdata to the value of the previous userdata
// Userdata has been successfully "pushed"
assert(
*( (int*) lua_touserdata( L, -1 ) ) ==
*( (int*) lua_touserdata( L, -2 ) )
);
【讨论】: