gpt4 book ai didi

delphi - Delphi loadlibrary() 中的错误

转载 作者:行者123 更新时间:2023-12-03 15:41:33 27 4
gpt4 key购买 nike

我给了我的软件用户一个从打开文件对话框中选择dll的机会。(这样我的用户就可以从我的网站下载dll并将其与主项目一起使用)。一切工作正常,它甚至可以发现 dll 是由我提供的或选择了无效的 dll。但是如果用户选择重命名的文件(例如: apple.txt 文件重命名为 apple.dll ),则会出现问题。我输入了这样的代码

尝试一下 dllHandle := LoadLibrary( pwidechar(openfiledialog1.filename)) ;

捕获 { 如果它不是 dll,则显示消息(但它可以是任何 dll,稍后它会检查这是我的 dll 还是第 3 方)}

结束;

delphi 显示的错误消息是“选择了错误的库图像”

但是如果用户选择无效的 dll,则 try catch 不起作用,它会显示自己的错误消息并启动。

谁能帮我,我正在使用delphi 2009

最佳答案

没有要捕获的异常,因为当 LoadLibrary 时不会引发异常。失败;它只是返回“0”。

您应该检查'dllHandle'是否为0,如果是,则使用GetLastError向用户显示错误信息。如记录的那样。或者,您可以使用 Win32Check RTL 中的函数将引发异常并显示相应的错误消息:

(编辑:“LoadLibrary”文档指出:要启用或禁用加载程序在 DLL 加载期间显示的错误消息,请使用 SetErrorMode 函数。 因此,如果您不希望操作系统显示额外的对话框,您可以在调用 LoadLibrary 之前设置错误模式。)

var
dllHandle: HMODULE;
ErrorMode: UINT;
begin
if OpenDialog1.Execute then begin
ErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); // disable OS error messages
try
dllHandle := LoadLibrary(PChar(OpenDialog1.FileName));
finally
SetErrorMode(ErrorMode);
end;
if Win32Check(Bool(dllHandle)) then begin // exception raised if false
// use the libary

end;
end;
end;

关于delphi - Delphi loadlibrary() 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com