Подтвердить что ты не робот

Попытка загрузить DLL в Windows с помощью LoadLibrary, когда отсутствует зависимая DLL

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Из MSDN:

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

Ссылка здесь