解析LUA脚本语言基本使用方法
LUA脚本语言基本使用方法是本文要将介绍的内容,主要是来学习Lua脚本语言的使用方法,具体内容来看本文详解。我也只是用了它1天,的确很简单,但又功能强大,能让你的程序特别富有弹性. 随便学一两下吧,就已经很有用了,一起来吧 LUA库去网上下载吧,这里就不上传.
先要把下边这些语句加入到VC中的头文件,一般是加到StdAfx.h中
extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" #pragma comment(lib, "lualib.lib") #pragma comment(lib, "lua.lib") }
然后一般来说都使用一个全局的LUA库定义的这个东西
lua_State* g_Lua;
并且在你的工程处初始化时也给LUA初始化
g_Lua = lua_open(); **加这句 /* load Lua base libraries */ 网上一些教材中这么写的 lua_baselibopen(g_Lua); 不过我这简单的例子中不用到这些也行 lua_tablibopen(g_Lua); lua_iolibopen(g_Lua); lua_strlibopen(g_Lua); lua_mathlibopen(g_Lua);
紧接着声明接口函数,注册上函数
lua_register(g_Lua, "Message", myMessage);
好,初始化部分完了,我们看看接口函数的写法。
函数必须这样的格式来写
static int Func(lua_State *L) { 静态型函数,而且必须带参数为lua_State结构指针 返回的值是代表返回的数据个数,比如return 2;就可以代表 返回两个整数啊,浮点数什么的,象LUA的脚本编写就可以这样 i, j = Func() , 这样就表示可以从Func接口函数中得到两个返回值了 return 0; }
执行脚本语句可以读文件,也可以直接读函数名
我们注册了
lua_register(g_Lua, "Message", myMessage); static int myMessage(lua_State *L) { OutputDebugString("OK"); return 0; } lua_dofile(g_Lua, strCurPath); //读文件,必须给出完整的文件路径名称 lua_dostring(g_Lua, "Message()"); //直接读函数
文件中只要写上
Message()
就可以了。
因为脚本可以处理一些复杂的逻辑,通常要把脚本执行给它在线程中运行
extern lua_State* g_Lua; HANDLE ScriptThreadID = NULL; UINT __stdcall DoScript(void *lPrarm) { CString strCurPath; GetModuleFileName(AfxGetInstanceHandle(), strCurPath.GetBuffer(MAX_PATH), MAX_PATH); strCurPath.ReleaseBuffer(); int nFind = strCurPath.ReverseFind('\\'); strCurPathstrCurPath = strCurPath.Left(nFind+1); strCurPath += (char*)lPrarm; lua_dofile(g_Lua, strCurPath); lua_dostring(g_Lua, "Message()"); //直接用函数名来执行 _endthreadex(0); return 0; } int DoLuaScript(const char* filename) {//通过文件来执行脚本 if (ScriptThreadID) TerminateThread(ScriptThreadID, 0); ScriptThreadID = (HANDLE)_beginthreadex(NULL, 0, DoScript, (PVOID)filename, 0, 0); return 0 ; } static int myMessage(lua_State *L) { OutputDebugString("OK"); return 0; }
相关推荐
峰哥 2020-09-23
陈云佳 2020-08-15
wqiaofujiang 2020-07-05
wordmhg 2020-06-26
wqiaofujiang 2020-06-16
zllbirdonland 2020-06-16
eroshn 2020-06-10
长安长夜Saint 2020-06-07
Dawnworld 2020-06-07
fansenjun 2020-03-01
CSDNMrWang 2020-05-11
Dawnworld 2020-05-05
陈云佳 2020-04-21
Neptune 2020-04-20
shunelly 2020-04-16
aolishuai 2020-04-15
YukiRain 2020-04-14
陈云佳 2020-03-07
陈云佳 2020-03-05