Как проверить, может ли DLL быть загружена без ошибки - PullRequest
1 голос
/ 22 октября 2009

У меня есть родное приложение на C ++ (нет ничего необычного .Net, только C ++). Однако он использует некоторые необязательные сборки .Net через dll-файлы оболочки смешанного режима. Эти библиотеки загружаются с использованием задержки загрузки. Дело в том, что с обертками в смешанном режиме они должны быть полностью доверенными для загрузки. Поэтому, когда приложение пытается использовать dll, если его там нет или если ему не доверяют, вся вещь вылетает с неприятным сообщением об ошибке.

Но в моем случае, если речь идет о моем основном приложении, оно может жить без этих DLL-файлов. Поэтому мне нужен способ проверить, могут ли эти библиотеки быть загружены (файлы есть и являются доверенными). Для этого я попытался сделать фиктивный вызов одной из функций dll в блоке try catch, надеясь перехватить исключение, но он все равно завершился с исключением «module not found».

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

мы также пытались использовать метод LoadLibrary, чтобы сначала загрузить DLL и проверить возвращаемое значение. Но эта функция загружает Dll, даже если ей не доверяют, но вылетает, когда мы пытаемся выполнить вызов метода.

Я не думаю, что это нерешенная проблема. Насколько сложно проверить, можно ли использовать dll, не пытаясь загрузить ее и в конечном итоге привести к сбою? Есть идеи?

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Если все методы не работают, попробуйте запустить отдельный процесс (например, простое приложение командной строки), который попытается загрузить библиотеку, а затем проанализируйте ее код возврата.

Но вы пробовали структурированную обработку исключений - т.е. __try / __ catch, а не try / catch? Смотри здесь .

0 голосов
/ 24 октября 2009

У меня была идея использовать отдельный процесс, чтобы сначала протестировать dll и посмотреть, не работает ли он с какими-либо ошибками. Я не хочу использовать это в своем приложении, потому что это не было клановым решением. но подход __try, __except работал с задержкой загрузки вызовов dll. Мне даже не пришлось использовать LoadLibrary. Спасибо.

...