lua函数的字符串参数突然变为null

时间:2015-12-10 00:53:02

标签: string lua

我的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);

谢谢

0 个答案:

没有答案