2013-09-11 4 views
1

Я пытаюсь загрузить библиотеку в проект Delphi, и эта библиотека может находиться в двух местах. Таким образом, чтобы загрузить его, я использую следующий код:Исключение при AccessViolation при попытке загрузить библиотеку

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

однако, у меня возникли проблемы, потому что она никогда не достигает исключения, я получил ошибку, что есть нарушение прав доступа, но он не пытается нагрузка от другого адреса ...

Есть ли у кого-нибудь идеи причины?

спасибо,

+0

LoadLibrary Windows API просто возвращает NULL при ошибке. –

+0

Но что я должен использовать для отслеживания этой ошибки и исключения из нее? – Felipe

+2

Если первая LoadLibrary возвращает NULL (FHandle NULL), снова вызовите LoadLibrary с другим именем файла. –

ответ

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

Чтобы добавить ответ Давида, если функция не вернется null т.е. не удалось, вы можете получить сообщение об ошибке с GetLastError(), см:

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

список кодов ошибок можно найти здесь:

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

Вы можете использовать результат GetLastError, чтобы поднять и исключить себя со значимым типом исключения и описанием.

Смежные вопросы