【发布时间】:2011-08-13 12:36:32
【问题描述】:
我有一些在 DLL 中导出到 Luabind 的类,这两个类(LuaScriptManager、EventManager)一切正常。 我可以从 Lua 调用他们的函数,一切都很好,但现在我试图在我的客户端可执行文件中设置一些新类,它与 DLL 链接,但到目前为止完全没有运气。
这是我调用的每个函数都会收到的错误消息: "没有找到匹配的重载,候选:void loadResource(ResourceManager&, std::string const&)"
类绑定来自http://www.nuclex.org/articles/5-cxx/1-quick-introduction-to-luabind:
struct Manager {
Manager() :
m_ResourceCount(0) {}
void loadResource(const std::string &sFilename) {
++m_ResourceCount;
}
size_t getResourceCount() const {
return m_ResourceCount;
}
size_t m_ResourceCount;
};
static Manager MyResourceManager;
void Bind(lua_State* l)
{
// Export our class with LuaBind
luabind::module(l) [
luabind::class_<Manager>("ResourceManager")
.def("loadResource", &Manager::loadResource)
.property("ResourceCount", &Manager::getResourceCount)
];
luabind::globals(l)["MyResourceManager"] = &MyResourceManager;
}
下面是对应的lua测试代码:
-- The following call will fail with the above error
MyResourceManager:loadResource("abc.res")
--MyResourceManager:loadResource("xyz.res")
-- If the function is commented out, this will work (accessing the property)
ResourceCount = MyResourceManager.ResourceCount
-- Calling my other classes' functions work fine
LuaScriptManager.GetInstance():WriteLine(ResourceCount)
这种奇怪行为的原因可能是什么?
【问题讨论】:
-
好吧,我把它缩小到:如果 lua 状态在 DLL 中打开 = 没有工作,如果 lua 状态在客户端 exe 中打开 = 工作。但是我当然希望两者都具有相同的状态,这样我就可以在它们之间共享对象....
-
会不会是名称混淆问题?