Ich schrieb eine einfache Lua-Funktion, die "C++" -Funktion verwendet, um auszuführen. Meine Absicht, eine 'C++' Funktion zu erstellen, besteht darin, dasselbe für alle lua Funktionen zu verwenden, um die 'C++' Variablen zu aktualisieren. Es funktioniert gut für Zahlen, aber wenn ich es für boolesche Werte versuchte, gibt es mir Ausnahme, wenn in Zeichenfolge konvertiert.Lua toString Ausnahme für booleschen Wert
Hier ist mein Code-Snippet.
C++ - Code.
#include <lua.hpp>
/* the Lua interpreter */
lua_State *luaState;
std::map<lua_State *, CLuaTest *> luaFbtlookup;
void CLuaTest::CLuaTest() {
// initialize Lua
luaState = luaL_newstate();
lua_register(luaState, "get_value", get_value); // func to get values
lua_register(luaState, "set_value", set_value); // func to set values
// load Lua base libraries
luaL_openlibs(luaState);
luaL_dofile(luaState, "C:\LuaTest.lua");
luaFbtlookup.insert(make_pair(luaState, this));
}
int get_value(lua_State *L);
int set_value(lua_State *L);
extern "C++" int get_value(lua_State *L)
{
string lightName = lua_tostring(L, 1);
FbTLuaLookup::iterator iter = luaFbtlookup.find(L);
if (iter != luaFbtlookup.end()) {
lua_pushstring(L, iter->second->getValueFrom(lightName).c_str());
return 1; // do not return zero
}
return 1;
}
extern "C++" int set_value(lua_State *L)
{
string lightName = lua_tostring(L, 1);
if (NULL == lua_tostring(L, 2))
{
printf("WARNING : Invalid String Argument/Cannot convert arg#2 to string");
}
else {
string value = lua_tostring(L, 2);
FbTLuaLookup::iterator iter = luaFbtlookup.find(L);
if (iter != luaFbtlookup.end()) {
iter->second->setValueTo(lightName, value);
lua_pushnumber(L, true);
return 1; // do not return zero
}
}
return 1;
}
CLuaTest::ExecuteScript(enum Seq) {
switch(Seq) {
case 0:
lua_getglobal(luaState, "AllLightsOff");
break;
case 1:
lua_getglobal(luaState, "RedLightOn");
break;
case 2:
lua_getglobal(luaState, "AmberLightOn");
break;
case 3:
lua_getglobal(luaState, "GreenLightOn");
break;
}
}
Mein Lua Script:
function AllLightsOff
set_value("RedLight", 0)
set_value("AmberLight",0)
set_value("GrenLight",0)
end
function RedLightOn
set_value("RedLight", 1)
set_value("AmberLight",0)
set_value("GrenLight",0)
end
function AmberLightOn
set_value("RedLight", 0)
set_value("AmberLight",1)
set_value("GrenLight",0)
end
function GreenLightOn
set_value("RedLight", 0)
set_value("AmberLight",0)
set_value("GrenLight",1)
end
Dinge funktionieren mit dem obigen Code in Ordnung, aber wenn ich versuchte, den Sollwert zu ändern Boolesche Werte wie set_value ("RedLight", False) verwenden Ich bekomme Warnmeldungen gedruckt. Sollte ich False
als Zeichenfolge übergeben?
Was ist die Warnmeldung? Ist es die "WARNUNG: Ungültiges String-Argument/kann Arg # 2 in String" nicht konvertieren? Nachricht in Ihrem C++ Code oder etwas anderes? –
@KeithThompson: Es ist in meinem C++ Code – kar