Когда загружаем свою ДЛЛ. выпрыгивает MessageBox с инфой о том, что какойто ДЛЛ нету. Вопрос, как убрать его ? и обработать инфу об ошибке программно
FDsagizi
> Когда загружаем свою ДЛЛ. выпрыгивает MessageBox с инфой о том, что какойто ДЛЛ
> нету. Вопрос, как убрать его ? и обработать инфу об ошибке программно
Перед загрузкой чекай на наличие файла)
Можеш конечно еще хукать вызов месаджбокса, но не рекомендую.
Это не операционная система выдает мессадж бокс, это ваш "дружественный" язык программирования чудит. Не знаю, на чем вы уж программируете...
Вызывайте виндовый loadlibrary, а не оболочку над ним, и будет вам счастье.
Zab
> Вызывайте виндовый loadlibrary, а не оболочку над ним, и будет вам счастье.
так и есть.
К примеру, загружаю RenderDirex11.dll под Windows XP где нету нужных длл естественно. И тут появляются messagebox-ы о том что d3dx11...dll не найден
Mephistopheles
> Перед загрузкой чекай на наличие файла)
Я так понимаю нужно будет пройтись по этим дерикториям ?
Каталог из которого загружается приложение.
Каталог, определенный параметром lpPathName.
Системный каталог. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу. Имя этого каталога - System32.
16-разрядный системный каталог. Нет никакой функции, которая получает путь к этому каталогу, но он ищется. Имя этого каталога является System.
Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.
Каталоги, которые перечислены в переменной окружения PATH.
>[b]FDsagizi[/b]
> К примеру, загружаю RenderDirex11.dll под Windows XP где нету нужных длл естественно. И тут появляются messagebox-ы о том что d3dx11...dll не найден
Потому, что в RenderDirex11.dll смежные dll вшиты через таблицу импорта и их наличие никто не проверяет. Вот тебе система при LoadLibrary и орёт, что нету того, что есть в импорте RenderDirex11.dll.
void SuppressSystemErrors (bool theToSuppress) { #ifdef _WIN32 SetErrorMode( toSuppress ? SEM_FAILCRITICALERRORS : 0); ST_DEBUG_LOG( "WinAPI, Critical errors " + ( toSuppress ? "suppressed!" : "unsuppressed.")); #endif }
gkv311
Отлично, SEM_FAILCRITICALERRORS MessageBox - а больше нету
А еще вопрос. а как можно получить сообщение об ошибке? Чтобы вывести его в консоль.
GetLastError()
А это не сама либа такое выдает при старте? Обычный виндовый LoadLibrary никогда messagebox-ы не показывает, просто не грузит dll-ку, если из импорта что-то не нашлось.
FireFenix
> GetLastError()
Да она покажет что, не найдена бибилиотека. Но вот имени бибилиотеки не понятно как получить
Crazy Hamster
> А это не сама либа такое выдает при старте? Обычный виндовый LoadLibrary
> никогда messagebox-ы не показывает, просто не грузит dll-ку, если из импорта
> что-то не нашлось.
А по моему всегда такое было.
Тема в архиве.