我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge替换为另一个库。我有一些类可以在LuaBridge中注册,作为框架初始化的一部分。然后,我可以在Lua中轻松地访问或实例化这些类。当我想调用已在框架init中注册的类/表上的自定义方法时,就会出现这个问题,我已经在Lua中定义了这个方法。
function MyObject:OnUpdate()
self:Init()
end如果我试图通过传递一个OnUpdate实例来调用MyObject,以便能够利用self,则会得到以下错误:
“尝试索引用户数据值(本地'self')”
如果我手动注册MyObject,而不是允许我的框架在启动时初始化它,它就会完美地工作。这就像Lua可以解析MyObject的元级,尽管我可以清楚地看到它的定义。我似乎也无法从Lua那里找到多少准确的错误。
发布于 2017-05-02 15:48:04
我解决了我的问题。我前面提到的得到注册的类在另一个库(DLL)中。我正在为每个类生成键,并将这些键存储在Lua注册表中。密钥生成使用静态模板化方法,该方法返回每个类型的静态字符的地址。当调用代码从DLL返回并进入我的EXE时,我将注册一个从DLL预先注册的类中继承的新类。当我查找基类的键时,它是不同的,因为执行最初在DLL的上下文中运行,现在在我的EXE上下文中运行。我假设这是在C++中使用模板以及代码正在执行的结果。在使用C++超过15年之后,我学到了一些新的东西。希望这能帮到别人。
https://stackoverflow.com/questions/43599839
复制相似问题