天天看点

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	请输入你的密码