å¨Cä¸è°ç¨Luaå½æ°çAPI主è¦ç±ä»¥ä¸å 个ï¼
ï¼1ï¼void lua_call (lua_State *L, int nargs, int nresults);
å½æ°è°ç¨ï¼nargs表示åæ°ç个æ°ï¼nresults表示è¿åå¼ç个æ°
é¦å
å°luaå½æ°åæ ï¼ç¶åå°åæ°ä¾æ¬¡åæ ï¼æåè°ç¨å½æ°å³å¯
å½æ°è°ç¨æ¶ï¼åæ°åå½æ°é½ä¼popåºæ ï¼è°ç¨è¿ååï¼ç»æä¼pushè¿æ
nresults==LUA_MULTRETï¼ææçè¿åå¼é½ä¼pushè¿æ
nresults!=LUA_MULTRETï¼è¿åå¼ä¸ªæ°æ ¹æ®nresultsæ¥è°æ´
Luaè¯å¥ï¼
a = f("how", t.x, 14)
å¨Cä¸çå®ç°ï¼
lua_getglobal(L, "f"); ãããããã // å½æ°å
¥æ
lua_pushstring(L, "how"); ããã // åæ°1å
¥æ
lua_getglobal(L, "t");ãããããã // 表tå
¥æ
lua_getfield(L, -1, "x"); ãããã // åæ°2å
¥æ
lua_remove(L, -2); ãããããã // è·³tåºæ
lua_pushinteger(L, 14);ãããã // åæ°3å
¥æ
lua_call(L, 3, 1); ãããããã // è°ç¨å½æ°ï¼åæ°åå½æ°é½ä¼åºæ
lua_setglobal(L, "a");ãããã // ç»aèµå¼ï¼æ 顶åºæ
ä¸è¿°ä»£ç æ§è¡å®æ¯åï¼å æ ç¶ææ¢å¤åæ ·ã
ï¼2ï¼int lua_pcall (lua_State *L, int nargs, int nresults, int msgh);
å½æ°è°ç¨ï¼å¨å®å
¨æ¨¡å¼ä¸ï¼å¹¶ä¸å¯ä»¥æ·»å é误å¤çå½æ°ã
å¦æè°ç¨æé´åçerrorï¼lua_pcallä¼æè·ä¹ï¼ç¶åpush stackä¸ä¸ªé误信æ¯(ä¼å
å°å½æ°ååæ°popåºæ )ï¼å¹¶ä¸è¿åä¸ä¸ªerror codeï¼é0çä¸ä¸ªå¼ï¼ã
åçerroræ¶ï¼å¦ææå®äºé误å¤çå½æ°ï¼ä¼å¨error messageå
¥æ åè°ç¨é误å¤çå½æ°ï¼å
·ä½ç±msghåæ°æ¥å³å®ï¼
ï¼1ï¼msgh==0ï¼ä¸æå®é误å¤çå½æ°ï¼å
¥æ ä¿¡æ¯ä¸åï¼
ï¼2ï¼msgh!=0ï¼msgh表示é误å¤çå½æ°çå æ indexï¼é误å¤çå½æ°ä¼ä»¥error message为åæ°ï¼å¹¶å°è¿åçæ°çerror
messageå
¥æ ã主è¦ç¨æ¥ç»error
messageæ·»å ããæ´å¤çdebugä¿¡æ¯ï¼æ¯å¦å æ è·è¸ªï¼å 为è¿äºä¿¡æ¯å¨pcallè°ç¨å®ä¹åæ¯æ¶éä¸å°çã
å½æ°è¿å代ç ï¼
LUA_OK(0)ï¼è°ç¨æå
LUA_ERRRUNï¼runtime error
LUA_ERRMEMï¼å
ååé
é误ï¼è¿ç§æ
åµä¸ä¸ä¼è°ç¨é误å¤çå½æ°
LUA_ERRERRï¼è°ç¨é误å¤çå½æ°æ¶åºéï¼å½ç¶ï¼ä¸ä¼åè¿ä¸æ¥è°ç¨é误å¤çå½æ°
LUA_ERRGCMMï¼è°ç¨metamethod.__gcæ¶æ¥éï¼ç±gcå¼èµ·ï¼åå½æ°æ¬èº«æ²¡å
³ç³»
ï¼3ï¼int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, int ctx, lua_CFunction k);
å½æ°è°ç¨ï¼å¨å®å
¨æ¨¡å¼ä¸ï¼å¹¶ä¸å
许å½æ°yieldã
温馨提示:答案为网友推荐,仅供参考