我的lua功能如下所示。参数“scandate”是从c ++到lua函数的。第一行的打印输出显示日期,此后,对字符串的任何操作都表示字符串突然变为空或空。
function DoCustomLookup(wkItem,wkfId,wkevid,lookupTableID,scandate,lookuptext,lookupval,evtAlertText,newvalue,xtraFld1,xtraFld2,xtraFld3,xtraFld4,newStatus,newStatusDesc,errFlags)
local rslt = "Script error"
print (scandate)
local scYY = scandate.sub(1,4)
local scMM = scandate.sub(7,2)
local scDD = scandate.sub(10,2)
print (scYY)
print (scMM)
print (scDD)
local scandt = #scandate
print (scandt)
scYY,scMM, scDD = scandate.match("(%d+)%-(%d+)%-(%d+)%s.+")
...
end
这是控制台输出:
2015-12-10 01:00:02
0
19
Workflow script error. Line :17: bad argument #2 to 'match' (string expected, got no value)
所以在我看来,绳子在空气中消失了。 有人可以解释一下发生了什么,以及如何保持字符串?奇怪的是,子串不起作用,但字符串长度仍然打印19.然后匹配也一直失败(这就是为什么我尝试将substr作为替代)
这是我的代码从c ++调用它。您会注意到我将日期复制到临时缓冲区。我想也许std :: string.c_str()可能超出范围,但它没有改变我将日期作为std :: string或c缓冲区传递。
bool LuaScript::DoCustomLookup(int wkItem, int wkfId, int wkevid, const int lookupTableID, const std::string scantime,
const std::string& lookuptext, const std::string& lookupval, const std::string evtAlertText,
std::string& newvalue,
const std::string xtraFld1, const std::string xtraFld2, const std::string xtraFld3, const std::string xtraFld4,
int& newStatus, std::string& newStatusDesc, AlertFlags& errFlags, std::string& errMsg)
{
errMsg = "";
char **date**[50];
sprintf(date, "%s", scantime.c_str());
lua_getglobal(L, "DoCustomLookup"); // get function
lua_pushinteger(L, wkItem); // push parameter on call stack
lua_pushinteger(L, wkfId); // push parameter on call stack
lua_pushinteger(L, wkevid); // push parameter on call stack
lua_pushinteger(L, lookupTableID); // push parameter on call stack
lua_pushstring(L, **date**); // push parameter on call stack
lua_pushstring(L, lookuptext.c_str()); // push parameter on call stack
lua_pushstring(L, lookupval.c_str()); // push parameter on call stack
lua_pushstring(L, evtAlertText.c_str()); // push parameter on call stack
lua_pushstring(L, newvalue.c_str()); // push parameter on call stack
lua_pushstring(L, xtraFld1.c_str()); // push parameter on call stack
lua_pushstring(L, xtraFld2.c_str()); // push parameter on call stack
lua_pushstring(L, xtraFld3.c_str()); // push parameter on call stack
lua_pushstring(L, xtraFld4.c_str()); // push parameter on call stack
lua_pushinteger(L, newStatus); // push parameter on call stack
lua_pushstring(L, newStatusDesc.c_str()); // push parameter on call stack
lua_pushinteger(L, errFlags); // push parameter on call stack
int rslt = lua_pcall(L, 16, 1, 0);
谢谢