1

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

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

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

有人知道原因吗?

谢谢,

4

2 回答 2

4

LoadLibrary不会引发异常。它是一个 Win32 函数。查阅文档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检查您的哪些可能位置包含该文件。

于 2013-09-11T13:38:33.870 回答
1

要添加到大卫的答案,如果函数确实返回null失败,你可以得到错误GetLastError(),见:

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

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

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

您可以使用 GetLastError 的结果通过有意义的异常类型和描述自己引发和异常。

于 2013-09-12T11:36:43.217 回答