關於Lua指令碼中跨路徑引用以及多重跨路徑引用的問題

2021-06-06 01:15:49 字數 1189 閱讀 8071

問題1:載入其他目錄的lua指令碼,並且其中引用了和lua指令碼放在同目錄中的dll檔案

比如lua指令碼中有這樣一句

require("test")用來載入同目錄下名為test.dll的庫,直接執行這個lua指令碼是沒問題的

但是在其他目錄下的exe檔案將此lua指令碼嵌入執行就會找不到test.dll了

因為當前執行的exe和dll沒在同乙個目錄

而require("c:\\dir\\test")這樣是行不通的,require的引數只能是包名,而不能有路徑

得通過設定路徑package.cpath來實現,注意這裡是package.cpath而不是package.path

package.cpath是用來設定字尾為dll的路徑

而package.path是用來設定字尾為lua的路徑

請根據自己的情況來決定

package.cpath的格式是用分號隔開各路徑,並用問號做通配,例如:.\?.dll;.\?51.dll;

把我們自己的路徑加進去

package.cpath = package.cpath..";"..myworkpath.."\\?.dll"

然後在使用require語句就能正常引用了

問題2:接上面問題的情況,解決後發現另乙個問題,剛剛引用的dll中呼叫了另外乙個dll,引用失敗

很明顯問題還是類似,要載入的dll和exe沒有在同一目錄

這裡需要把dll目錄新增到載入路徑中

找到一篇文章詳細介紹這種情況:

裡面有乙個msdn的鏈結的詳細說明,提到了setdlldirectory這個函式,可惜只支援win8

而裡面提供的幾個方法:

setdlldirectory,據說不同版本的windows有相容問題

setcurrentdirectory,指令碼執行時間很長,擔心對其他模組有影響

最後乙個是把載入dll的方式改為

loadlibraryex("dll絕對路徑", 

null, load_with_altered_search_path

); 

通過指定load_with_altered_search_path,讓系統dll搜尋順序從dll所在目錄開始。

但是難道去改lua內部邏輯?是的,正好找到雲風的一篇部落格提到修改lua載入dll的路徑問題的

裡面有提到修改位置,再根據這片部落格的編譯方法:

終於把載入的問題全搞定了

C 中的指標 引用以及函式呼叫中的問題

函式傳參的方式有三種 1 值傳遞 2 引用傳遞 3 指標傳遞 值傳遞傳遞的是這個值的乙個拷貝,形參是實參的乙個拷貝,對形參的操作不影響實參的值 指標傳遞傳遞的是那個指標的乙個拷貝,對這個拷貝的指標指向的那塊記憶體的操作會影響原始指標指向的那塊記憶體的值 引用傳遞傳遞的是這個實參的乙個別名,傳遞的是這...

C 11中的右值引用以及std move

看了很多篇文章,現在終於搞懂了c 中的右值以及std move 左值和右值最重要的區別就是右值其實是乙個臨時的變數 在c 11中,也為右值引用增加了新語法,即 比如如下 void testfunc int i void testfunc int i intmain 此時輸出為 right value...

matlab中關於S fun的呼叫以及子系統的封裝

近日學習matlab建模方面的東西,mark乙個 邵玉斌老師的教案。本篇記錄乙個包含s函式的子系統的建立和封裝,用s函式產生任意正弦波。matlab版本 r2017b 步驟如下 首先建立主系統模型。在命令列視窗輸入simulink,在彈出的視窗中新建blank model,接著點選simulink工...