0

我在我的框架中创建了一个围绕 LuaBridge 的包装器,这样我就可以轻松地将 LuaBridge 换成替代库。作为我的框架初始化的一部分,我有一些在 LuaBridge 中注册的类。然后我可以在 Lua 中轻松访问或实例化这些类。当我想在已经在框架 init 中注册的类/表上调用自定义方法时,问题就出现了,我已经在 Lua 中定义了该方法。

function MyObject:OnUpdate()
  self:Init()
end

如果我尝试通过传递 MyObject 的实例来调用 OnUpdate,以便我可以利用 self,我会收到以下错误:

“尝试索引用户数据值(本地'self')”

如果我手动注册 MyObject 而不是让我的框架在启动期间对其进行初始化,它会完美运行。就像 Lua 可以解析 MyObject 的元表,即使我可以清楚地看到它已定义。我似乎也无法从 Lua 中找到太多关于该确切错误的信息。

4

1 回答 1

0

我发现了我的问题。我上面提到的注册类在另一个库(DLL)中。我正在为每个类生成密钥并将这些密钥存储在 Lua 注册表中。密钥生成使用静态模板化方法,该方法返回每种类型的静态字符的地址。当调用代码从 DLL 返回并进入我的 EXE 时,我正在注册一个新类,该类继承自 DLL 中的一个预注册类。当我查找基类的键时,情况有所不同,因为执行最初是在 DLL 的上下文中运行的,而现在它是在我的 EXE 的上下文中运行的。我认为这是在 C++ 中使用模板以及代码执行位置的结果。在使用 C++ 超过 15 年之后,我学到了一些新东西。希望这会对其他人有所帮助。

于 2017-05-02T15:48:04.390 回答