我正在尝试在我的Delphi项目中加载一个库,这个库可以在两个位置。所以要加载它,我使用以下代码:
try
FHandle:=LoadLibrary(('some\address'));
except on EAccessViolation do
FHandle:=LoadLibrary(('another\address'));
end;
但是,我遇到了问题,因为它从未到达异常,我收到了一个错误,即存在访问冲突,但它没有尝试从其他地址加载...
有没有人知道原因?
感谢,
答案 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的结果使用有意义的异常类型和描述来提升和例外。