如果加载dll找不到依赖项,有什么方法可以捕获错误?

我正在编写一个Windows 32位程序,可以使用多个可能的dll之一。因此,它尝试依次使用加载每个dll SysUtils.SafeLoadLibrary,如果加载成功,它将使用该dll。

不幸的是,这些dll中的某些是静态链接到其他dll的。这些dll可能会从计算机中丢失。在这种情况下,我会看到对话框告诉我

[myprogram]:[myprogram.exe]系统错误

该程序无法启动,因为您的计算机缺少[某些dll名称]。请尝试重新安装该程序以解决此问题。”

在该对话框上按“确定”按钮后,程序获取错误代码并尝试使用其他dll之一,然后运行正常。

而不是向用户显示该对话框,我希望我的程序默默地忽略它。

我该怎么做?

在某些情况下:我的程序是用Delphi 2007编写的。Windows版本是Windows 8.1,但是该程序也应与其他Windows版本(=> Windows XP)一起使用。

我已经尝试过了,SetErrorMode(SEM_FAILCRITICALERRORS)但是没有任何区别。

戴维·赫弗南

SafeLoadLibrary将错误模式设置为您提供的参数值,然后在调用return之后将其LoadLibrary恢复。很可能您没有为该参数提供值,在这种情况下,SEM_NOOPENFILEERRORBOX将传递默认值在这种情况下,可能会禁用SEM_FAILCRITICALERRORS它来解释您看到的行为。

您可以在SEM_FAILCRITICALERRORS每次致电时通过传递来解决问题SafeLoadLibrary或者,也许更好的方法是通过当前的错误模式。但是,这很难获得。在Vista及更高版本中,您可以致电GetErrorMode但是在旧版本中,您必须这样做:

ErrorMode := SetErrorMode(0);
SetErrorMode(ErrorMode);

由于这是一个过程范围的设置,因此在两次调用之间有一个机会窗口,SetErrorMode可以抓住多线程应用程序。

坦白地说,我认为您应该SetErrorMode在启动过程中的整个生命周期中仅调用一次。考虑到这一点,我会避开SafeLoadLibrary

如果您想利用它的其他功能,即防止浮点控制状态发生变化,那么我认为您应该自己实现该功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建dll时找不到依赖项

找不到dll程序集或依赖项

调试木偶错误:找不到依赖项

发生.net核心依赖项注入错误,“找不到包“ enc.dll”的编译库位置”

错误:添加依赖项后(Maven)找不到或加载主类

“找不到合适的加载方法”有什么问题?

为什么在有匹配项时出现找不到匹配项的错误?

解决获取依赖项的错误:找不到工件,Grails

pygame安装错误:找不到依赖项?

为什么IntelliJ找不到SBT快照依赖项?

Spark找不到依赖项

无法加载文件或程序集“video.player.net.dll”或其依赖项之一。找不到指定的模块。":"video.player.net.dll

加载我自己的 DLL 时找不到正确的 MSVCP140d.dll 依赖项,即使它存在于文件夹中

捕获Flag错误:找不到或加载主类Espresso

ISEXP:警告:-6248:找不到依赖文件libc.dll或其组件的依赖项之一

如果没有DLL,如何防止“由于找不到xxx.dll而无法继续执行代码”错误

Tensorflow错误:DLL加载失败:找不到指定的过程

Pyinstaller:导入错误:DLL加载失败:找不到指定的模块

ElastAlert 导入错误:DLL 加载失败:找不到指定的程序

Pyinstaller 导入错误:DLL 加载失败:找不到指定的模块

在Delphi中加载C#DLL找不到依赖库DLL

“ java.lang.UnsatisfiedLinkError:找不到本机方法:”如果删除头文件,可以解决错误吗?

无法运行具有 .jar 依赖性的 Java 应用程序 - “错误:找不到或加载主类”

有什么方法可以指定多个版本的依赖项对我的库有效吗?

找不到程序集'System.Xml.Linq.dll'的依赖项'System.XML'Version ='5.0.5.0'

当所有依赖项都被注入后,为什么我总是收到 $[injector:modulerr] 未捕获的错误?

SQL Server自定义CLR失败,错误为“无法加载文件或程序集或其依赖项之一。系统找不到指定的文件。”

如果Go应用程序找不到外部依赖项/服务,是否应该恐慌

如果找不到未使用的第二级依赖项jar,为什么Maven编译器插件会失败