Luabind problem
-
Hallo,
vielleicht könnt Ihr mir helfen:
Ich habe eine Klasse CLuaJobEvent die in der Funktion todo() eine Lua Instanz erstellt.
lua_State* L= luaL_newstate(); luabind::open(L); luaL_openlibs(L); //Die Bibliothek luabind::module(L) [ luabind::class_<CLuaJobEvent>("Job") .def(luabind::constructor<>()) .def("operateMsg", &CLuaJobEvent::operateMsg) .def("getMSG",&CLuaJobEvent::getMSG) .def("exec",&CLuaJobEvent::executeExternProgramm) .def("log",&CLuaJobEvent::log) ]; luabind::module(L) [ luabind::class_<VoucherStruct>("Voucher") .def("id",&VoucherStruct::getID) .def("param",&VoucherStruct::getparam) .def("content",&VoucherStruct::getContent) ]; luabind::module(L) [ luabind::class_<CMSGObject>("MSG") .def(luabind::constructor<>()) .def("getCmd",&CMSGObject::getCmd) .def("getParam",&CMSGObject::getParamAsStdStr) .def("getSRC",&CMSGObject::getSrcCon) .def("copyto",&CMSGObject::copyTo) .def("getSubDataName",&CMSGObject::getSubdataName) .def("hasSubDataName",&CMSGObject::hasSubDataName) .def("setNewTargetSet",&CMSGObject::setNewTragetStringSet) .def("setCmd",&CMSGObject::setCmd) .def("setParam",&CMSGObject::setParam) ]; int test=luaL_loadfile(L, m_LuaScriptPath.c_str() ); if(test) { logtxt << "Job " << m_MSGObj->getCmd() << " : " << m_LuaScriptPath.c_str() << " -- " << lua_tostring(L, -1) << std::endl; m_SH.toLog(SL_ERROR,logtxt.str()); logtxt.str(""); lua_pop(L, 1); return; } luabind::object compiledScript(luabind::from_stack(L, -1)); printf("Dat Funzt!\n"); try { luabind::call_function<void>(compiledScript,this); }catch(const exception &e) { m_SH.toLog(SL_INFO,"\n###################################################################################\n"); logtxt << "Job " << m_MSGObj->getCmd() << ": Ausgefuehrtes Lua Script endet mit Fehler " << e.what() << ".\n"; m_SH.toLog(SL_ERROR,logtxt.str()); logtxt.str(""); }
Sie registriert über die funktion module(L) die 3 Klassen CLuaJobEvent ( also sich selbst), die Structur VoucherStruct und die Klasse CMSGObject.
Dann ladet sie das Scriptlocal Job=... local MSG=Job:getMSG() Job:log("FTP-Operation.lua wird ausgefuehrt\n") strmsg=MSG:getParam() pos=string.find(strmsg,"SJ") if pos ~= nil then newmsg, subset=string.gsub(strmsg,"SJ","") if subset >= 1 then Job:log("Execute FTP-AutoClient.exe mit Option " .. newmsg .. " und Operationsdatei progress.j\n") local v=Job:exec(MSG:getCmd(),"FTP-AutoClient.exe","C:\\tools\\Wente Thiedig GmbH\\FTP-AutoClient","-t " .. newmsg .. " -o progress.j") if v ~= nil then if v:content() == "0" then Job:log("Execute FTP-AutoClient.exe erfolgreich ausgefuehrt\n") local voucher2=Job:operateMsg("sendto",MSG:getCmd(),MSG:getParam(),"cognexcmd"); end end end end Job:log("FTP-Operation.lua Abgeschlossen\n")
Da das Script als Funktion auf den LuaStack gelegt wird, holt sie sich die Funktion und soll sie mit
luabind::call_function<void>(compiledScript,this);// (parameter this sich selbst ausführen)
die Funktion ausführen. nun bekomme ich aber eine Pointer Exception von get_pointee_class(lua_State* L, P const& p, class_id dynamic_id).
Weil die Klasse anscheinend nicht registriert wurde.Hab ich Irgendetwas vergessen?
Mit freundlichen Grüssen
Twist