需求
易语言的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命令表的库文件名,不需要设置路径
|