解析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;   


}  

相关推荐