BOLT.NET中的关于数据库链接和使用的LUA与C#语言的交互设计
来源:互联网 发布:推荐几本好书 知乎 编辑:程序博客网 时间:2024/05/18 01:13
因为实际上手过的界面引擎也就只有迅雷的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()
0 0
- BOLT.NET中的关于数据库链接和使用的LUA与C#语言的交互设计
- Storm的Spout和Bolt中的方法
- Lua和C语言的交互
- Lua和C语言的交互详解
- Lua和C++语言的交互详解
- Lua和C语言的交互详解
- CLIPS专家系统与.NET的交互,C#语言
- 基于MySQL数据库的C#与Python语言交互调用
- [C#/Lua]C#和Lua交互的Demo
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- Lua与C#交互
- Storm可靠的Bolt与不可靠的Bolt
- C#与ACCESS数据库的链接和操作典型代码
- Lua和C语言的交互(一)
- Lua和C语言的交互(二)
- Lua和C语言的交互(三)
- Lua和C语言的交互(三)
- weiyi通讯录(三)仿微信下拉列表和android样式
- GSM的安全(二)
- android中常见的类(三)
- javascript基础知识1.1
- 从源码区别include 与require 的不同
- BOLT.NET中的关于数据库链接和使用的LUA与C#语言的交互设计
- 业务需求说明书
- 字符编码常识及问题解析
- uint8_t / uint16_t / uint32_t /uint64_t 的简单介绍
- R语言数字转字符串:自动补0
- 计算机视觉基础1——视差与深度信息
- 段错误
- 一个表单内2个按钮跳转到不同的页面
- 初识hadoop