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('\\');
   strCurPath = 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;

}


转自:http://wtxpwh.blog.163.com/blog/static/2065303520086273031522/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值