解析LUA腳本語言基本使用方法
LUA腳本語言基本使用方法是本文要將介紹的內(nèi)容,主要是來學(xué)習(xí)Lua腳本語言的使用方法,具體內(nèi)容來看本文詳解。我也只是用了它1天,的確很簡(jiǎn)單,但又功能強(qiáng)大,能讓你的程序特別富有彈性. 隨便學(xué)一兩下吧,就已經(jīng)很有用了,一起來吧 LUA庫(kù)去網(wǎng)上下載吧,這里就不上傳.
先要把下邊這些語句加入到VC中的頭文件,一般是加到StdAfx.h中
- extern "C" {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- #pragma comment(lib, "lualib.lib")
- #pragma comment(lib, "lua.lib")
- }
然后一般來說都使用一個(gè)全局的LUA庫(kù)定義的這個(gè)東西
- lua_State* g_Lua;
并且在你的工程處初始化時(shí)也給LUA初始化
- g_Lua = lua_open(); **加這句
- /* load Lua base libraries */ 網(wǎng)上一些教材中這么寫的
- lua_baselibopen(g_Lua); 不過我這簡(jiǎn)單的例子中不用到這些也行
- lua_tablibopen(g_Lua);
- lua_iolibopen(g_Lua);
- lua_strlibopen(g_Lua);
- lua_mathlibopen(g_Lua);
緊接著聲明接口函數(shù),注冊(cè)上函數(shù)
- lua_register(g_Lua, "Message", myMessage);
好,初始化部分完了,我們看看接口函數(shù)的寫法。
函數(shù)必須這樣的格式來寫
- static int Func(lua_State *L)
- {
- 靜態(tài)型函數(shù),而且必須帶參數(shù)為lua_State結(jié)構(gòu)指針
- 返回的值是代表返回的數(shù)據(jù)個(gè)數(shù),比如return 2;就可以代表
- 返回兩個(gè)整數(shù)啊,浮點(diǎn)數(shù)什么的,象LUA的腳本編寫就可以這樣
- i, j = Func() , 這樣就表示可以從Func接口函數(shù)中得到兩個(gè)返回值了
- return 0;
- }
執(zhí)行腳本語句可以讀文件,也可以直接讀函數(shù)名
我們注冊(cè)了
- 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()"); //直接讀函數(shù)
文件中只要寫上
- Message()
就可以了。
因?yàn)?strong>腳本可以處理一些復(fù)雜的邏輯,通常要把腳本執(zhí)行給它在線程中運(yùn)行
- 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()"); //直接用函數(shù)名來執(zhí)行
- _endthreadex(0);
- return 0;
- }
- int DoLuaScript(const char* filename)
- {//通過文件來執(zhí)行腳本
- 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;
- }
哈哈,寫完了,不懂得文學(xué),隨便亂寫一通了。
小結(jié):解析LUA腳本語言基本使用方法的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!