ПрограммированиеФорумОбщее

LoadLibrary без MessageBox

#0
11:56, 7 мар 2014

Когда загружаем свою ДЛЛ. выпрыгивает MessageBox с инфой о том, что какойто ДЛЛ нету. Вопрос, как убрать его ? и обработать инфу об ошибке программно

#1
12:08, 7 мар 2014

FDsagizi
> Когда загружаем свою ДЛЛ. выпрыгивает MessageBox с инфой о том, что какойто ДЛЛ
> нету. Вопрос, как убрать его ? и обработать инфу об ошибке программно
Перед загрузкой чекай на наличие файла)

Можеш конечно еще хукать вызов месаджбокса, но не рекомендую.

#2
13:25, 7 мар 2014

Это не операционная система выдает мессадж бокс, это ваш "дружественный" язык программирования чудит. Не знаю, на чем вы уж программируете...
Вызывайте виндовый loadlibrary, а не оболочку над ним, и будет вам счастье.

#3
13:31, 7 мар 2014

Zab
> Вызывайте виндовый loadlibrary, а не оболочку над ним, и будет вам счастье.
так и есть.

К примеру, загружаю RenderDirex11.dll под Windows XP где нету нужных длл естественно. И тут появляются messagebox-ы о том что d3dx11...dll не найден

#4
13:35, 7 мар 2014

Mephistopheles
> Перед загрузкой чекай на наличие файла)
Я так понимаю нужно будет пройтись по этим дерикториям ?

Каталог из которого загружается приложение.
Каталог, определенный параметром lpPathName.
Системный каталог. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу. Имя этого каталога - System32.
16-разрядный системный каталог. Нет никакой функции, которая получает путь к этому каталогу, но он ищется. Имя этого каталога является System.
Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.
Каталоги, которые перечислены в переменной окружения PATH.

#5
13:36, 7 мар 2014

>[b]FDsagizi[/b]
> К примеру, загружаю RenderDirex11.dll под Windows XP где нету нужных длл естественно. И тут появляются messagebox-ы о том что d3dx11...dll не найден
Потому, что в RenderDirex11.dll смежные dll вшиты через таблицу импорта и их наличие никто не проверяет. Вот тебе система при LoadLibrary и орёт, что нету того, что есть в импорте RenderDirex11.dll.

#6
13:50, 7 мар 2014
void SuppressSystemErrors (bool theToSuppress)
{
#ifdef _WIN32
    SetErrorMode(toSuppress ? SEM_FAILCRITICALERRORS : 0);
    ST_DEBUG_LOG("WinAPI, Critical errors " + (toSuppress ? "suppressed!" : "unsuppressed."));
#endif
}
#7
14:22, 7 мар 2014

gkv311
Отлично, SEM_FAILCRITICALERRORS MessageBox - а больше нету

А еще вопрос. а как можно получить сообщение об ошибке? Чтобы вывести его в консоль.

#8
15:23, 7 мар 2014

GetLastError()

#9
21:30, 7 мар 2014

А это не сама либа такое выдает при старте? Обычный виндовый LoadLibrary никогда messagebox-ы не показывает, просто не грузит dll-ку, если из импорта что-то не нашлось.

#10
11:33, 8 мар 2014

FireFenix
> GetLastError()
Да она покажет что, не найдена бибилиотека. Но вот имени бибилиотеки не понятно как получить

Crazy Hamster
> А это не сама либа такое выдает при старте? Обычный виндовый LoadLibrary
> никогда messagebox-ы не показывает, просто не грузит dll-ку, если из импорта
> что-то не нашлось.
А по моему всегда такое было.

ПрограммированиеФорумОбщее

Тема в архиве.