C++ &引用;铸造;Lua表到Lua表的地址
假设我有一个表的地址——我如何向它“强制转换”一个表变量?我不担心“坏习惯”或崩溃,因为这只是个人问题 我想做一些像C++ &引用;铸造;Lua表到Lua表的地址,c++,lua,lua-table,C++,Lua,Lua Table,假设我有一个表的地址——我如何向它“强制转换”一个表变量?我不担心“坏习惯”或崩溃,因为这只是个人问题 我想做一些像 lua\u表选项卡=*(lua\u表*)0xaddr …但在Lua全球环境中 我知道这有多糟糕,但我真的需要知道这是否可能。这可能不是我想做的最好的方法,但我很确定这是最简单的,如果可能的话,它会起作用。我正在使用Lua 5.1.4。为了完成您正在尝试的操作,您必须: 获取指向Lua表的数据结构的指针。我相信你相信你已经有了这样一个指针。但是Lua中没有任何东西可以保证(通过某种
lua\u表选项卡=*(lua\u表*)0xaddr
…但在Lua全球环境中
我知道这有多糟糕,但我真的需要知道这是否可能。这可能不是我想做的最好的方法,但我很确定这是最简单的,如果可能的话,它会起作用。我正在使用Lua 5.1.4。为了完成您正在尝试的操作,您必须:
lobject.h
中定义,名称为table
ltable.h
中找到该代码。然而,可能还有更多的API。另外,请注意,这些API中有许多采用了lua_状态
,因此它们可能会进行一些堆栈修改
您还需要查看Lua的API,以便在不破坏表的情况下学习如何使用它们。Lua可能对调用某些函数的时间、函数之间的顺序或其他方面有一定的期望。打破这些,后果自负Table tab = *(Table*)0xaddr
这是行不通的。或者至少,不是你想的那样。LUA是在C.写的,这意味着<代码>表< /> >不会像C++值类型那样工作。复制它将只执行按位复制。因此,修改选项卡
只会修改这些值的本地副本。如果这些是指向其他数据结构的指针,那可能没问题,因为您的指针和原始指针指向相同的数据结构。但是,如果您执行一些更改表上的Table::flags
字段的操作,例如,存储在Lua中的表不会受到影响,只会更改本地选项卡
副本
您必须将对象作为指针来操作,而不是原始对象的副本
Table *tab = reinterpret_cast<Table*>(0xaddr);
Table*tab=reinterpret\u cast(0xaddr);
Lua没有为此公开API
修复你的设计比强迫它工作更容易、更可靠。你是如何得到地址的?@user我想他是
把它串起来的。“我很确定这是最简单的,如果可能的话它会工作的”我很确定你认为什么是“最简单的”做任何你想做的事情的方法,肯定不是最简单的方法。也许吧,但我想试试。我不确定问题是什么。你已经知道这很糟糕了。你已经知道如何做这件坏事(通过铸造)。那么你问的是什么?