我给了我的软件用户从openfile对话框中选择dll的机会。(这样我的用户就可以从我的网站下载dlls并与主项目一起使用它)。一切正常,它甚至可以发现dll是由我提供的,或者选择了无效的dll.but,如果用户选择重命名的文件(例如:重命名为apple.dll的apple.txt文件),问题就会产生。我像这样输入了代码
试试dllHandle := LoadLibrary( pwidechar(openfiledialog1.filename));
如果它不是dll (但它可以是任何dll,它会检查这是我的dll或稍后的第三方)}
结束;
delphi显示的错误消息是“错误的库图像被选中”
但是,如果用户选择无效的dll,则尝试捕捉无法工作,它显示自己的错误消息并删除。
有人能帮我吗,我正在用德尔菲2009
发布于 2010-10-15 10:19:45
没有要捕获的异常,因为当LoadLibrary失败时不会引发异常;它只是返回'0‘。
您应该检查“dllHandle”是否为0,如果是,通过使用GetLastError向用户显示错误信息,如文档所示。或者,您可以在RTL中使用Win32Check函数,这将引发带有适当错误消息的异常:
(编辑:LoadLibrary的文档声明:To enable or disable error messages displayed by the loader during DLL loads, use the SetErrorMode function.,所以如果您不希望操作系统显示额外的对话框,则在调用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;https://stackoverflow.com/questions/3940406
复制相似问题