天天看點

C++ 調用lua時 dofile,loadfile以及require

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);
}
           
c++

繼續閱讀