BOLT.NET中的关于数据库链接和使用的LUA与C#语言的交互设计

原创 2014年12月09日 18:11:19

因为实际上手过的界面引擎也就只有迅雷的BOLT,其主要的特点在于采用XML,LUA以及C++或者C# .NET等多语言混合编程的设计开发模式,通过XML可以十分方便快捷的进行窗体对象树的创建,控件间的关系通过树形图的方式进行布局和设计,并提供绑定响应事件的解决方案,可读性和可维护性有保证;

此外,各个控件的响应方法主要通过LUA脚本代码的编写来进行实现,LUA小巧精悍,在编写的时候可以快速上手减轻负担。至于引擎环境的搭建目前比较成熟的主要有基于C++或者C# .net平台的两种。使用BOLT进行项目开发过程中最令人头疼的是各个语言间的交互设计,在其中有很大的难题,而且只能由开发者自身去解决。我在使用BOLT进行数据信息管理系统的开发的时候,需要用到数据库的链接,这其中需要涉及到一些数据的读取和更新,然而已知的解决方案只有通过压栈的方式一个一个的将数据传入LUA端然后在进行界面的更新,这既阻碍了数据信息处理的连续性也大大增加了数据操作的难度,这让我很费解。以上是一个实际使用过BOLT进行界面开发的一个小青年的愚见,如果有说错的地方,还请见谅,如果能指教一番就更好了。

---------------------------------------更新---------------------------------------
关于数据库数据传输和使用的方法已经在好久以前就发现了,只是很久没上过知乎,才一直没有进行更新。其实并不是没有方法的,在监听获取数据的同时使用回调函数CallBack将数据传输到程序主体中,实现对UI的更新或者其他用途其实都是可行的。
比方说在.Net环境下的实例:

public void ConnectDataBase(){}//使用C#链接数据库获取数据记录

public void ConnectDataBase()
        {
        DataSet dsall;
        String mysqlcon = "database=BookSale;Password=yancai1991;User ID=sa;server=(local)";//Data Source=MySQL;;charset=utf8";
        SqlConnection conn;
        conn = new SqlConnection(mysqlcon);
        SqlDataAdapter mdap;
            try
            {
 
                mdap = new SqlDataAdapter("select * from Admins", conn);
                dsall = new DataSet();
                mdap.Fill(dsall, "hard");
                
                DataTable dt = dsall.Tables[0];
                
                foreach(DataRow dr in dt.Rows)
                {
                    //遍历列
                    for(int i=0;i<dt.Columns.Count;i++)
                    {
                        PushData(dr[i].ToString());
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {

            }
       
        }


[LuaClassMethod]
private static int ConnectDataBase(IntPtr L)//将函数注册到LUA环境中
{
var instance = GetInstance(L); //通过父类的GetInstance(L)方法获取BOLT环境下通过工厂类创建的MyClass实例
instance.ConnectDataBase(); //调用MyClass的Add方法 //将计算结果Push到Lua栈,L.PushXXX是一系列扩展方法,方便将C#数据Push到Lua栈
return 1; //1表示往Lua栈里Push了一个元素
}
[LuaClassMethod]
private static int AttachResultListener(IntPtr L)//监听回调函数
{
var instance = GetInstance(L); //通过调用父类的GetInstance(L)方法获取BOLT环境下通过工厂类创建的MyClass实例 
if (!L.IsLuaFunction(-1)) return 0; //判断Lua栈的栈顶元素是否为function

//
//调用L.ToAction<T>(Action<T> caller)扩展方法将Lua栈顶function转为C#的Action<T>委托
//其中caller用来具体将委托的参数Push到Lua栈,并通过L.Call(int arg,int ret)调用Lua的function
// arg表示Push到Lua栈的元素个数
// ret表示Lua function的返回值个数
//
var function = L.ToAction<string>(result =>
{
L.PushString(result); //将resultPush到Lua栈 
L.Call(1, 0); //调用Lua的方法,1表示参数个数为1,0表示返回值个数为0
});

instance.OnPushDataFinish += function; //将转换后的委托添加到MyClass实例的OnAddFinish事件上
return 0; //此处并没有往Lua栈里Push元素,故返回0
}
////////////////////////////////////////////////////////////////////////////////////////////
LUA执行代码:通过工厂实例获取C#端注册的函数,函数执行时回调函数响应输出数据库数据
local myClassFactory = XLGetObject("HelloBolt.NET.MyClass.Factory") 
local myClass = myClassFactory:CreateInstance()
myClass:AttachResultListener(function(result)
--process result 
XLMessageBox(result)
end)
myClass:ConnectDataBase()


深入浅出Lua编程实战视频课程:(2)protocol buffer在lua中的使用

-
  • 1970年01月01日 08:00

项目后期Lua接入笔记04--宏定义处理HelloWorld

Lua和我们Unity游戏用的C#脚本语言有些不同,并不是编译型语言,虽然lua语言在真正执行以前,也会进行编译,这就意味着脚本里面并不支持c#里的宏定义形式,比如我们常用的平台判定UNITY_AND...
  • suifcd
  • suifcd
  • 2017-03-28 20:29:11
  • 1184

c#调用脚本语言Lua——简单Demo

c#调用脚本语言Lua——简单Demo 配置: 1. 下载c#下的Lua支持类库。下载地址:http://files.luaforge.net/releases/luainterface/luaint...
  • e421083458
  • e421083458
  • 2015-02-08 10:41:05
  • 17676

lua语言中与时间相关的函数总结

本人总结了一些lua语言中一些时间函数,欢迎补充! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1、os.time() 含义:获取当前的时间戳(返回的是从1970...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2015-11-01 21:10:22
  • 1143

在 C# 中使用 Lua(摘要)

原文地址:http://www.gamedev.net/reference/articles/article2275.asp这篇文章用一个简单的控制台程序范例讲述了如何在 C# 中使用 Lua.首...
  • inelm
  • inelm
  • 2006-05-17 16:20:00
  • 525

推荐交互设计师阅读的一本书

作为一门独立的学科和行业,用户体验设计正在快速发展并得到越来越多的重视。随着互联网思维这一概念的提出和兴起,“用户体验”的地位和关注度得到进一步的提升和强化。  市面上已经有很多专业的用户体验书籍,但...
  • zuoninger
  • zuoninger
  • 2014-08-05 09:00:47
  • 3541

LuaBit 对于LUA语言位操作符LUA语言实现,依赖于LUA Number的定义。(可参看未定义的实现部分)

//位操作运算不能对浮点型进行操作。在进行位操作时进行检查 local function check_int(n) -- checking not float if(n - math.floor(...
  • sunning9001
  • sunning9001
  • 2015-06-09 00:01:08
  • 845

为什么学习lua语言

本来也不打算学习lua语言,但是近期学习openwrt中luci大部分都是由lua语言写的随便看了一下lua的介绍,不看不知道,一看吓一跳,原来lua的应用非常广泛,而且lua解析器非常小可以再嵌入式...
  • laoylhuli
  • laoylhuli
  • 2016-10-07 00:22:52
  • 529

Unity3D游戏开发之Lua与游戏的不解之缘(上)

----------------------------------------------------------------------------------------------------...
  • u014641631
  • u014641631
  • 2014-12-02 09:51:36
  • 2721

lua 在unity 中的协程使用

最近尝试在unity中用上lua。 而其中必然会遇到的一个问题就是
  • maybe_xxh
  • maybe_xxh
  • 2014-04-14 15:43:24
  • 2206
收藏助手
不良信息举报
您举报文章:BOLT.NET中的关于数据库链接和使用的LUA与C#语言的交互设计
举报原因:
原因补充:

(最多只允许输入30个字)