Попытка загрузить DLL в Windows с помощью LoadLibrary, когда отсутствует зависимая DLL - PullRequest
11 голосов
/ 24 ноября 2010

У меня есть приложение, которое использует LoadLibrary на Windows для динамической загрузки плагинов.Однако некоторые плагины имеют другие зависимые библиотеки DLL, такие как клиентские библиотеки базы данных.Когда вы пытаетесь загрузить такую ​​DLL, а одна из зависимых DLL не существует, вы получаете неприятное диалоговое окно Windows:

"Программа не может запуститься, потому что xxx.ddl отсутствует на вашем компьютере. Попробуйте переустановитьпрограмма для решения этой проблемы. "

Есть ли простой способ избежать этого диалога?Я надеялся, что можно было бы использовать LoadLibraryEx и передать флаг, который говорит: «Не давайте мне этот раздражающий диалог», но это не похоже на это.

Мне бы хотелось, чтобы приложение обрабатывалоэта ошибка, а не Windows, обрабатывает ее для меня, тем более, что текст сообщения неверен (проблема не в том, что программа не может запуститься, программа работает довольно счастливо, она просто не может загрузить этот плагин).

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

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

Ответы [ 2 ]

13 голосов
/ 24 ноября 2010

Использовать SetErrorMode () .Используйте его с SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS перед загрузкой DLL и с 0 сразу после.

5 голосов
/ 24 ноября 2010

Из MSDN:

Чтобы включить или отключить сообщения об ошибках, отображаемые загрузчиком во время загрузки DLL, используйте функцию SetErrorMode.

Ссылка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...