首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi加载库()中的错误

Delphi加载库()中的错误
EN

Stack Overflow用户
提问于 2010-10-15 07:51:52
回答 1查看 4.3K关注 0票数 3

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

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

如果它不是dll (但它可以是任何dll,它会检查这是我的dll或稍后的第三方)}

结束;

delphi显示的错误消息是“错误的库图像被选中”

但是,如果用户选择无效的dll,则尝试捕捉无法工作,它显示自己的错误消息并删除。

有人能帮我吗,我正在用德尔菲2009

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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之前设置错误模式。)

代码语言:javascript
运行
复制
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;
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3940406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档