尝试加载库时AccessViolation上的异常

时间:2013-09-11 13:24:48

标签: delphi exception dll exception-handling

我正在尝试在我的Delphi项目中加载一个库,这个库可以在两个位置。所以要加载它,我使用以下代码:

  try
    FHandle:=LoadLibrary(('some\address'));
  except on EAccessViolation do
    FHandle:=LoadLibrary(('another\address'));
  end;

但是,我遇到了问题,因为它从未到达异常,我收到了一个错误,即存在访问冲突,但它没有尝试从其他地址加载...

有没有人知道原因?

感谢,

2 个答案:

答案 0 :(得分:4)

LoadLibrary不会引发异常。这是一个Win32功能。咨询documentation,如果失败,您将看到它返回NULL

您的代码应为:

FHandle := LoadLibrary('some\address');
if FHandle = 0 then
  FHandle := LoadLibrary('another\address');
if FHandle = 0 then
  // handle the error, probably by raising an exception

另一种选择可能是使用FileExists检查哪些可能的位置包含该文件。

答案 1 :(得分:1)

要添加大卫的答案,如果该函数确实返回null即失败,则可以使用GetLastError()获取错误,请参阅:

http://msdn.microsoft.com/en-us/library/ms679360.aspx

可在此处找到错误代码列表:

http://msdn.microsoft.com/en-us/library/ms679360.aspx

您可以使用GetLastError的结果使用有意义的异常类型和描述来提升和例外。