我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge换成替代库。我有一些在LuaBridge中注册的类作为我的框架初始化的一部分。然后,我可以在Lua中轻松访问或实例化这些类。当我想在类/表上调用一个已经在框架init中注册的自定义方法时,问题出现了,我已经在Lua中定义了。
function MyObject:OnUpdate()
self:Init()
end
如果我尝试通过传递MyObject实例调用OnUpdate,以便我可以利用self,我会收到以下错误:
"尝试索引用户数据值(本地'自我')"
如果我手动注册MyObject而不是允许我的框架在启动期间初始化它,它可以完美地工作。它就像Lua可以解析MyObject的metatable,尽管我可以清楚地看到它的定义。我似乎也无法从Lua那里找到很多确切的错误。
答案 0 :(得分:0)
我发现了我的问题。我上面提到的注册的类是在另一个库(DLL)中。我为每个类生成密钥并将这些密钥存储在Lua注册表中。密钥生成使用静态模板化方法,该方法返回每种类型的静态字符的地址。当调用代码从DLL返回到我的EXE时,我注册了一个新类,该类继承自DLL中的一个预先注册的类。当我查找基类的键时,它是不同的,因为执行是在DLL的上下文中运行的,现在它在我的EXE上下文中运行。我假设这是在C ++中使用模板以及代码执行的结果。使用C ++超过15年后,我学到了一些新知识。希望这会帮助其他人。