天天看點

C向LUA中寫入多元數組(表)

最近開發的一個軟體需要用一個數組做為軟體的設定,部分設定有軟體自帶做為初始化,其它部分有LUA腳本加入,這裡先做一個測試例子用Delphi實作

數組結構如下:

UI = {

UserName = {T = 'Text',C = '使用者名', V = 'user',H = '請輸入你的使用者名'};

PassWord = {T = 'Text',C = '密碼', V = 'word',H = '請輸入你的密碼'};

}

這裡需要用Delphi生成上面的數組代碼如下

L:= luaL_newstate();
    if L = nil then Exit;
    luaL_openlibs(L);
    
    lua_newtable(L); // 建立一個表後面會放入全局變量UI
		    //====================================================================================
			//壓入一個字元串UserName用來放入表{T = 'Text',C = '使用者名', V = 'user',H = '請輸入你的使用者名'}
		    lua_pushstring(L,'UserName');  // UI['UserName']
				    lua_newtable(L); // 建立一個表暫稱p1
						    // p1[1] = ['T'] = 'Text'
						    lua_pushstring(L,'T');
						    lua_pushstring(L,'Text');
						    lua_settable(L, 3);
						    // p1[2] = ['C'] = '使用者名'
						    lua_pushstring(L,'C');
						    lua_pushstring(L,'使用者名');
						    lua_settable(L, 3);
						    // p1[3] = ['V'] = 'user'
						    lua_pushstring(L,'V');
						    lua_pushstring(L,'user');
						    lua_settable(L, 3);
						    // p1[4] = ['H'] = '請輸入你的使用者名'
						    lua_pushstring(L,'H');
						    lua_pushstring(L,'請輸入你的使用者名');
						    lua_settable(L, 3);
				    lua_settable(L, 1);// UI['UserName'] = p1
		    //===================================================================================
			//壓入一個字元串PassWord用來放入表{T = 'Text',C = '密碼', V = 'word',H = '請輸入你的密碼'}
		    lua_pushstring(L,'PassWord');   //UI['PassWord']
		    		lua_newtable(L); // 建立一個表暫稱p2
						    // p1[1] = ['T'] = 'Text'
						    lua_pushstring(L,'T');
						    lua_pushstring(L,'Text');
						    lua_settable(L, 3);
						    // p1[2] = ['C'] = '密碼'
						    lua_pushstring(L,'C');
						    lua_pushstring(L,'密碼');
						    lua_settable(L, 3);
						    // p1[3] = ['V'] = 'word'
						    lua_pushstring(L,'V');
						    lua_pushstring(L,'word');
						    lua_settable(L, 3);
						    // p1[4] = ['H'] = '請輸入你的密碼'
						    lua_pushstring(L,'H');
						    lua_pushstring(L,'請輸入你的密碼');
						    lua_settable(L, 3);
		    		lua_settable(L, 1);// UI['PassWord'] = p2
		    //==================================================================================
    lua_setglobal(L, 'UI');      // 把表設定給全局變量UI
    ret:=luaL_loadfilex(L, PChar(FileName), nil);
    if ret <> LUA_OK then Exit;
    lua_resume(L, nil, 0);
    lua_close(L);
           

用lua來周遊一下代碼如下

for k, v in pairs(UI) do  

print(k)

for kk, vv in pairs(UI[k]) do  

   print('   ',kk,vv)  

end 

end

列印結果如下

UserName 
	T	Text
	C	使用者名
	V	user
	H	請輸入你的使用者名
PassWord
	T	Text
	C	密碼
	V	word
	H	請輸入你的密碼