需求
易語言的dll默認是從運行目錄加載的。
如果dll過多,加上一堆核心庫和擴展庫,運行目錄就非常的雜亂。
有沒有辦法,把dll放在其他目錄呢?
解決
通常有兩種辦法,一種是內存加載dll,另一種是將dll放在子目錄。
易語言的核心支持庫里,有一個命令:
置DLL裝載目錄 ()
來看該命令的詳細說明:
調用格式: 〈文本型〉 置DLL裝載目錄 ([文本型 DLL裝載目錄]) - 系統核心支持庫->其他 英文名稱:SetDllCmdLoadPath 本命令用來設置當程序中執行到DLL命令時裝載其DLL庫文件的優先裝載路徑,即系統將優先 到該路徑下去裝載指定的DLL文件。本命令所設置結果對所有DLL命令設置中的未指定全路徑的DLL 庫文件裝載均有影響,且在程序運行期間全程有效。命令執行后返回系統在本次設置以前的值。 本命令為高級命令。 參數<1>的名稱為“DLL裝載目錄”,類型為“文本型(text)”,可以被省略。本參數指定 系統對DLL命令配置中DLL庫文件的優先裝載路徑,如果被省略,則默認值為空文本。
操作系統需求: Windows
使用此命令可以指定dll的默認加載目錄。
例如,要將dll都存放在運行目錄下的“Plugin”目錄下。
可以將“Plugin”設置為一個常量。
然后在程序開始的位置,進行dll目錄設置:
置DLL裝載目錄 (取運行目錄 () + “\” + #目錄名_插件)
假設需要使用“cvyjkmk.dll”進行opencv找圖。
將dll文件放在“Plugin”目錄下,然后申明dll接口:
.版本 2 .DLL命令 高級模糊找多目標_, 整數型, "cvyjkmk.dll", "@AdvancedFuzzyMapping", , 成功返回結果數據長度。 .參數 大圖, 文本型 .參數 小圖, 文本型 .參數 最小信度, 小數型 .參數 尋找次數, 整數型 .參數 返回結果數據, 文本型
在win11專業版的虛擬機里進行測試,調用找圖方法的時候,出現dll里接口不存在的報錯。
怎么辦呢?
經過論壇搜索和實測,更換為一個dll命令,就可以正常加載指定目錄的dll了。
.版本 2 .DLL命令 _置DLL裝載目錄, , "Kernel32.dll", "SetDllDirectoryA", , .參數 目錄路徑, 文本型
在程序入口處設置dll加載目錄
_置DLL裝載目錄 (取運行目錄 () + “\” + #目錄名_插件)
dll命令表的庫文件名,不需要設置路徑
|