C++ LuaBridge 尝试索引用户数据值(本地 'self')
C++ LuaBridge attempt to index a userdata value (local 'self')
我在我的框架中创建了一个围绕 LuaBridge 的包装器,这样我就可以轻松地将 LuaBridge 换成另一个库。作为我的框架初始化的一部分,我有某些 类 在 LuaBridge 上注册。然后我可以在 Lua 中轻松访问或实例化那些 类。当我想在 class/table 上调用自定义方法时,问题就来了,它已经在框架 init 中注册,我在 Lua.
中定义了
function MyObject:OnUpdate()
self:Init()
end
如果我尝试调用 OnUpdate 并传递一个 MyObject 实例,以便我可以使用 self,我会收到以下错误:
"attempt to index a userdata value (local 'self')"
如果我手动注册 MyObject 而不是让我的框架在启动期间对其进行初始化,它会完美运行。就像 Lua 可以解析 MyObject 的元表,即使我可以清楚地看到它的定义。我似乎也无法从 Lua.
中找到太多关于那个确切错误的信息
我想通了我的问题。我上面提到的已注册的 classes 在另一个库 (DLL) 中。我正在为每个 class 生成密钥并将这些密钥存储在 Lua 注册表中。密钥生成使用静态模板化方法,即 returns 每种类型的静态字符地址。当调用代码从 DLL 返回并进入我的 EXE 时,我正在注册一个新的 class,它继承自 DLL 中预先注册的 classes 之一。当我查找基 class 的键时,它是不同的,因为最初在 DLL 的上下文中执行 运行,而现在在我的 EXE 的上下文中执行 运行。我假设这是在 C++ 中使用模板以及代码执行位置的结果。在使用 C++ 超过 15 年之后,我学到了一些新东西。希望这会对其他人有所帮助。
我在我的框架中创建了一个围绕 LuaBridge 的包装器,这样我就可以轻松地将 LuaBridge 换成另一个库。作为我的框架初始化的一部分,我有某些 类 在 LuaBridge 上注册。然后我可以在 Lua 中轻松访问或实例化那些 类。当我想在 class/table 上调用自定义方法时,问题就来了,它已经在框架 init 中注册,我在 Lua.
中定义了function MyObject:OnUpdate()
self:Init()
end
如果我尝试调用 OnUpdate 并传递一个 MyObject 实例,以便我可以使用 self,我会收到以下错误:
"attempt to index a userdata value (local 'self')"
如果我手动注册 MyObject 而不是让我的框架在启动期间对其进行初始化,它会完美运行。就像 Lua 可以解析 MyObject 的元表,即使我可以清楚地看到它的定义。我似乎也无法从 Lua.
中找到太多关于那个确切错误的信息我想通了我的问题。我上面提到的已注册的 classes 在另一个库 (DLL) 中。我正在为每个 class 生成密钥并将这些密钥存储在 Lua 注册表中。密钥生成使用静态模板化方法,即 returns 每种类型的静态字符地址。当调用代码从 DLL 返回并进入我的 EXE 时,我正在注册一个新的 class,它继承自 DLL 中预先注册的 classes 之一。当我查找基 class 的键时,它是不同的,因为最初在 DLL 的上下文中执行 运行,而现在在我的 EXE 的上下文中执行 运行。我假设这是在 C++ 中使用模板以及代码执行位置的结果。在使用 C++ 超过 15 年之后,我学到了一些新东西。希望这会对其他人有所帮助。