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 Script

    local 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


Anmelden zum Antworten