3

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

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

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

结尾;

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

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

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

4

1 回答 1

11

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

您应该检查“dllHandle”是否为 0,如果是,请GetLastError按照文档说明向用户显示错误信息。或者,您可以使用Win32CheckRTL 中的函数,该函数将引发异常并显示相应的错误消息:

编辑:'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;
于 2010-10-15T10:19:45.840 回答