C++ LuaBridge尝试索引userdata值(本地'self')

我在我的框架中创建了LuaBridge的包装器,以便我可以轻松地将LuaBridge替换为另一个库。我有一些在框架初始化期间注册到LuaBridge的类。然后我可以在Lua中轻松访问或实例化这些类。问题出现在我想调用已在框架初始化中注册的类/表的自定义方法时,我已在Lua中定义了它。

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

如果我尝试调用OnUpdate并传递MyObject实例,以便我可以利用self,我会得到以下错误:

“尝试索引userdata值(本地'self')”

如果我手动注册MyObject而不允许我的框架在启动期间初始化它,它可以完美地工作。就像Lua不能解析MyObject的元表一样,即使我可以清楚地看到它已经定义。我也找不到关于Lua的那个确切错误的更多信息。

点赞
用户4873064
用户4873064

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

2017-05-02 15:48:04