在C 中使用LUA

2021-08-21 00:05:58 字數 2184 閱讀 1795

lua.lib庫的使用

便於後期使用

便於開發中的標頭檔案引用

便於mfc工程的開發使用

使生成的是庫,而不用生成可執行檔案,便於其他工程的引用

新增頭檔案目錄,庫目錄

新增鏈結器附加依賴項

//初始化lua虛擬機器//

state = lual_newstate();

if (!state)

luaopen_base(state);

luaopen_table(state);

luaopen_string(state);

luaopen_math(state);

luaopen_debug(state);

lual_openlibs(state);

//註冊函式,註冊後在指令碼可以呼叫msg方法

lua_register(state, "msg", tracelua);

lual_dofile(state, filename.c_str());

//載入指令碼//

int status = lual_loadfile(state, filename.c_str());

if (status)

log(info) << "lua檔案載入成功..."<< filename;

_statemap[filename] = state;

return true;

}//需要註冊的函式

int luamanager::tracelua(lua_state * lua_state)

bool plcmgr::getliftstatus(int entrance, opc::liftstatus & status, string & desc)

//函式名稱//

lua_getglobal(state, "get_lift_status");

//傳參//

lua_pushnumber(state, entrance);

try//在指令碼中如果return 'abc', 1,那麼1在棧頂即-1,字串在-2//

//1代表棧底,-1代表棧頂//

if (!lua_isnumber(state, -2))

if (!lua_isstring(state, -1))

int statusint = (int)lua_tointeger(state, -2);

desc = lua_tostring(state, -1);

} catch (...)

return false;

}

function get_lift_status(entrance)

msg('asd') --即註冊的函式

res, status = readopc(i, pr_entrance_status) --帶著返回值的註冊函式

if(res) then

return 0, "comerr"

endif(status==0) then

return status, "asd"

elseif(status==1) then

return status, "asd"

else

return 0, "dataerr"

endend

在VS中 使用C 訪問Lua

建立vs程式集,然後新增引用luainte ce.dll檔案,選中引用,右鍵新增引用,然後瀏覽到luainte ce.dll的目錄,選擇新增就可以了 而後將luanet.dll檔案複製貼上到,程式集的debug的目錄下,最後建立在vs中使用lua指令碼 我這裡是test.lua檔案 完成情況如圖 u...

開始學習LUA,在LUA中使用UNICODE字串

新買到lua程式設計 第2版 開始學習lua程式設計。今天測試用lua呼叫windows的messageboxw函式。需要在lua中定義unicode字串。lua的string型別為8位編碼,包括數值0,可以編碼任意二進位制資料。如果編碼unicode,則需要使用 轉義序列。如字串 lua 如果使用...

在lua環境中使用protobuf

最近在cocos2dx的專案中,需要在lua指令碼層使用protobuf協議。官方已經推出了很多種語言的版本。但唯獨lua版本不全。於是開始研究protobuf在lua下的實現,將完整的過程記錄了下來,希望對其它人能有所幫助。簡單介紹一下裡面的三個目錄 example 存放的乙個示例協議,plugi...