1.首先要強調的是,lua require的路徑用的是斜杠"/",而不是從Windows文件屬性那里復制來的反斜杠"\"。
2.通過 print(pagckage.path) 和print(package.cpath)打印lua系統封裝的兩個全局屬性可以看到當前lua解析器require的時候默認替換的路徑
3.更改路徑的時候,lua腳本加 ";..\\?.lua" 而dll文件加 ";..\\?.dll"
下面,我要將路徑為 "D:\Lua5.1\lua\hgj-test\huang.lua" 的lua腳本require進hgj.lua腳本里。
huang.lua腳本:
huang={}
function huang.SumDouble(max)
sum=0
for i=0,max,2 do
sum=sum+i
end
return sum
end
hgj.lua腳本:
package.path = "D:/Lua5.1/lua/hgj-test/huang.lua" ..";..\\?.lua"
require"huang.lua"
print(huang.SumDouble(100))
print(package.path)
print(package.cpath)
在hgj.lua按F5打印出來的結果是:
2550
D:/Lua5.1/lua/hgj-test/huang.lua;..\?.lua
.\?.dll;.\?51.dll;D:\Lua5.1\?.dll;D:\Lua5.1\?51.dll;D:\Lua5.1\clibs\?.dll;D:\Lua5.1\clibs\?51.dll;D:\Lua5.1\loadall.dll;D:\Lua5.1\clibs\loadall.dll
因為編碼不同,所以加載dll出來的是亂碼,如果知道dll里封裝的屬性和函數,加載之后就可以用print(package.loadlib("--dll名--",“--屬性名/函數名--”))來讀取dll的屬性和函數。
我隨便加載了公司打卡用的釘釘軟件里的一個dll:
package.path = "D:/Program Files (x86)/DingDing/main/current/alilog.dll"..";..\\?.dll"
require"alilog.dll"
--package.loadlib("alilog.dll","不知道函數名")
加載出一篇亂碼,看不了,而且也不知道里面有什么函數,用不了,只能當示范。
當然,如果不用require調用其他腳本的屬性或者函數,而是直接執行一整個其他腳本,還是 dofile("文件路徑") 舒服,直接
dofile("D:/Lua5.1/lua/hgj-test/huang.lua")
就O了,但是有一點,代碼設計的時候,調用的腳本里面的函數必須它自己執行,如果你光封裝屬性函數,不執行,那就不能用dofile這條路線了。
原文:https://blog.csdn.net/piger91/article/details/79940663
---------------------
作者:青竹浪
來源:CSDN
原文:https://blog.csdn.net/piger91/article/details/79940663
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
