Lua C API: 将指针作为 userdata 推入栈中

我有一个指针地址,它指向一个 userdata。我是这样检索地址的:

*(uint32_t*)lua_touserdata(L, -1)

之后,我想通过使用该指针将该 userdata 再次推到栈顶。如果可能,必须做什么?

点赞
用户11731719
用户11731719

你可以通过 lua_newuserdata() 获取到一个已经创建的用户数据的指针,然后创建一个新的用户数据。接着将第一个用户数据指针的底层值设置为新用户数据的底层值即可。

int *ud1 = lua_touserdata( L, -1 ); // 获取已创建的用户数据

int *ud2 = lua_newuserdata( L, sizeof( int ) ); // 创建新的用户数据
*ud2 = *ud1; // 将新的用户数据的值设置为之前用户数据的值

// 用户数据已成功 "push"
assert(
        *( (int*) lua_touserdata( L, -1 ) ) ==
        *( (int*) lua_touserdata( L, -2 ) )
);
2020-04-05 01:16:40