我已经在框架中创建了一个周围的包装器,以便我可以轻松地将Luabridge换成替代库。作为我的框架初始化的一部分,我有某些课程在Luabridge注册。然后,我可以在LUA轻松访问或实例化这些课程。当我想在框架init中注册的类/表上的自定义方法时,问题就到了,我在lua中定义了。
function MyObject:OnUpdate()
self:Init()
end
如果我尝试通过传递myObject的实例来调用onupdate,以便我可以使用自我,我会收到以下错误:
"尝试为用户数据索引(本地'self'(
如果我手动注册MyObject,而不是允许我的框架在启动过程中初始化它,则它可以很好地工作。就像Lua可以清楚地看到它的定义,Lua可以解决MyObject的MetaTable。我似乎也找不到LUA的确切错误。
我弄清楚了我的问题。我上面提到的注册的类是在另一个库(DLL(中。我正在为每个班级生成钥匙,并将这些密钥存储在LUA注册表中。密钥生成使用静态模板方法,该方法返回每种类型的静态字符的地址。当调用代码从DLL返回到我的EXE时,我正在注册一个新类,该类从DLL中的预注册类中继承。当我查找基类的密钥时,它是不同的,因为执行原本是在DLL的上下文中运行的,现在它在我的EXE的上下文中运行。我认为这是在C 中使用模板以及代码正在执行的结果。使用C 超过15年后,我学到了一些新知识。希望这会帮助别人。