XMLファイルの一部であるlua関数を実行する必要があります。私はXMLを解析し、関数全体を文字列として読み込みます。文字列からLua関数を実行する
lua_pcall実行しようとすると、attempt to call a nil value
と表示されます。 しかし、私は関数の部分を削除しようとし、内部のロジックだけを使用して、それは私にうまく働いた。私は機能として実行するために追加のステップを実行する必要があるかどうかを理解する必要があります。
初期化:作業
/* the Lua interpreter */
lua_State *luaState;
// initialize Lua
luaState = luaL_newstate();
lua_register(luaState, "getValue", get_value);
lua_register(luaState, "setValue", set_value);
// load Lua base libraries
luaL_openlibs(luaState);
: XML
-- lua script to be executed by this algorithm
-- use following API calls to get and set function block data
-- local IN1 = getValue("IN1")
-- setValue("OUT1", value)
setValue("RequestAccepted", "true");
-- lua script
C++コード:
TAlgoTable::iterator iter = algoTable.find("RequestAccepted");
if (luaL_dostring(luaState, iter->second.c_str()))
{
printf("Failure at Algorithm : 'RequestAccepted' Reason : %s", lua_tostring(luaState, -1));
}
が機能していない:
-- lua script to be executed by this algorithm
function RequestAccepted()
-- use following API calls to get and set function block data
-- local IN1 = getValue("IN1")
-- setValue("OUT1", value)
setValue("RequestAccepted", "true");
end -- lua script
C++コード:
lua_getglobal(luaState, "RequestAccepted"); // function to be called
if (lua_pcall(luaState, 0, 0, 0)) {
printf("Failure at Algorithm : 'RequestAccepted' Reason : %s", lua_tostring(luaState, -1));
}
最初の例では、 'lua_dostring()'を呼び出してLuaコードを解析して実行します。 2番目の例では、あなたはそのビットを残していない限り、そうではありません。 – md5i