摘要: 1.1 从C程序调用LUA函数LUA的函数和普通变量一样也是First Class Variable类型,可以看作函数指针变量参与栈操作。因此调用过程分为如下几个步骤:请求LUA函数(指针)入(GLOBAL)栈。将函数需要的参数入栈,入栈顺序按照参数被声明的顺序。告知LUA虚拟机入栈参数的个数、函数返回值的个数,并调用此LUA函数。从栈定获得返回值,先返回的先入栈,然后将返回值显式出栈。1.2 从LUA脚本调用C函数LUA没有提供PYTHON那样丰富的类库,因此复杂的功能需要在C程序中定义好,然后通过lua决定调用时机。在LUA库中定义了可以被LUA虚拟机识别的C函数模型:int functi 阅读全文
posted @ 2011-07-11 15:55 木子你妹 阅读(8925) 评论(0) 推荐(1) 编辑
摘要: 在lua脚本调用中,如果我们碰到一种不好的脚本,例如:while 1 do doend那我们的程序主线程也会被阻塞住。那我们如何防止这种问题呢?下面就给出一个解决的办法。首先为了不阻塞主线程,那我们就要开一个线程,把处理脚本的操作都放在这个新开的工作线程里。(要详细了解工作线程和界面线程的区别和管理,请参看本人的另一篇文章BLOG下Windows编程里的《Windows 线程漫谈——界面线程和工作者线程》)。总体思路:1、开线程来执行脚本解析,下面是StartRun()2、导出一个判断是否结束函数,让脚本每个循环都调用,判断线程是否该结束了,这个函数在下面是IsThreadExit(),返回一 阅读全文
posted @ 2011-07-11 15:51 木子你妹 阅读(2337) 评论(0) 推荐(1) 编辑
摘要: 这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口、组件,随便你怎么叫),希望能用脚本来控制主程序的行为。这实际上也是一种把业务分离,用脚本控制的架构,可能有些人把这种脚本叫做业务引擎,工作流等。为什么选择lua?因为它是一个能和C/C++结合得很紧的脚本语言,而我们的程序是用VC++ 写的;另外一点是因为它的名气,连WOW都用lua来提供API让玩家修改其游戏行为,那我是找不到什么理由拒绝它了。Lua是什么?在哪里获取LUA?详细的不说了,在网上一搜大把,只说一下它的官网吧:www.lua.org,在这 阅读全文
posted @ 2011-07-11 15:48 木子你妹 阅读(5710) 评论(0) 推荐(1) 编辑