C++ 調用lua時 dofile,loadfile以及require
函數 | 運作機制 | 傳回結果 | 出現錯誤 |
---|---|---|---|
dofile | 加載并運作 | 傳回運作的結果 | 傳遞給調用者 |
loadfile | 加載,不運作; 想運作得用lua_pcall配合使用 | 傳回編譯的結果 | l會傳回一個錯誤資訊,但不傳遞給調用者 |
require | 在加載一個.lua檔案時,require會先在package.loaded中查找此子產品是否存在,如果存在,直接傳回子產品。 僅調用一次。 | 暫無研究 | 暫無研究 |
dofile編譯運作後再使用pcall會報錯,傳回值為2。
例子:
1.方法一 使用loadfile與lua_pcall
int main()
{
lua_State *L = luaL_newstate();
if (L == NULL)
{
return 1;
}
luaL_openlibs(L);
int ret = luaL_loadfile(L, "main.lua");
if (ret)
{
printf("Lua doFile Error !\n");
}
if (lua_pcall(L, 0, 0, 0) != LUA_OK)
{
printf("pcall error \n");
return 1;
}
lua_getglobal(L, "width");
int width = lua_tonumber(L,-1);
lua_pop(L, 1);
printf("%d\n",width);
}
2.方法二 使用lua_dofile
int main()
{
lua_State *L = luaL_newstate();
if (L == NULL)
{
return 1;
}
luaL_openlibs(L);
int ret = luaL_dofile(L, "main.lua");
if (ret)
{
printf("Lua doFile Error !\n");
}
lua_getglobal(L, "width");
int width = lua_tonumber(L,-1);
lua_pop(L, 1);
printf("%d\n",width);
}