Lua實戰筆記第3篇 Qt調用lua動態鏈接庫

Qt調用Lua動態鏈接庫

上一篇筆記講解了如何在VS2017下使用C++調用Lua動態鏈接庫,因筆者平時也喜歡使用Qt,故創作本篇記錄Qt是如何調用Lua Dll協助我們工作的

新建Qt工程


 

這是創建好的Qt Console工程

 

將Lua5.1源碼目錄“src”拷貝至Qt工程目錄下,如下圖所示

 

在Qt中打開LearnLua.pro文件,將“INCLUDEPATH += ./src”添加到任意位置,至此頭文件路徑已經配置OK了

 

將lib和dll文件拷貝至生成的exe所在文件目錄下
 

在Qt工程main函數中插入如下代碼

lua_State *L = lua_open();        
luaopen_base(L);        
luaopen_table(L);        
luaopen_string(L);        
if (luaL_loadfile(L, "Print.lua"))       
{           
//std::string error = "cannot run Lua file: " + filename;            //throw Exception(error.c_str());            //LOGDEBUG(error.c_str());            //cout<<error<<endl;            const char * error = lua_tostring(L, -1);            printf("%s\n 執行腳本文件失敗", error);           
return -1;        }        
if (lua_pcall(L, 0, 0, 0))       
{           
const char * error = lua_tostring(L, -1);           
printf("%s\n 執行腳本文件失敗", error);           
return -1;        
}

 

新建Print.lua腳本,將其置於exe所在目錄的上級目錄下

以下代碼爲Print.lua腳本中的內容

--[[
File name: Print.lua
Description: lua編程Demo1:熟悉lua的基本語法,如變量聲明,C語言中if else等語句
                         在lua中的實現
Function List:

Author: Hanc
Version: V0.0
Other:
                1. lua中沒有i++這類用法 
                2. while中不能像C一樣使用continue功能 
                3. 除了nil和false都爲真 
                4. 拼接字符串使用 .. 
                5. C語言中的“&&”“||”“!”在lua中爲 and or not 
                6. lua中 != 要用 ~=
                7. 與C/C++不同,lua中的下標是從1開始的
History:
        2019.1.5 創建


]]--
print("hello Lua !!")
--[[
        a = 10  聲明全局變量  
        local a = 10    聲明局部變量
        lua中儘量使用局部變量,保證垃圾回收及時
        全局變量賦值爲“nil”纔會交給垃圾回收
--]]
a = 10  

--打印變量的數據類型
print(type(a))
-- 將字符串轉換爲數字
local c = tonumber("256")
print(c)
--字符串連接使用“..”
local d = "hello baba".."\two shi\n"
--local e = string.len(d)
--print(string.len("we"))

--if else 用法
if(1==1 and 1==2) then
        print("1==1")
else
        print("1 != 1")
end

-- if elseif 用法
if(1==1 and 1==2) then
        print("1==1")
elseif(2==2) then
        print("2 == 2")
end

--break退出,未實現continue
while(nil)      do
print("while")
end

--lua中的do while語句
local i = 100;
repeat
        i = i+1
        print("i = "..i)
until i>110

for var =1,5,1 do
        print("var = "..var)
end

--pairs遍歷所有
--ipairs 按照標準數組去訪問
local days = {"Sun","Mon","Tus"}
for i,v in ipairs(days) do
        print(i..":"..v)
end

編譯運行Qt程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章