С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93

Ошибка 126 в LoadLibrary

24.01.2016, 19:39. Показов 9693. Ответов 12

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла проблема при динамической загрузке DLL в RAD Studio XE8. Не видит саму DLL (GetLastError упорно возвращает ошибку 126). Даже в корень диска класть пытались. Сама DLL написана на C++ Builder 6. Изначально подумали, что дело в том, что не активировал компиляцию в один файл, но это тоже не помогло.
Код из XE8:
C++
1
2
3
4
5
6
7
8
AnsiString S1="d:\\MdlSearch.dll";
HMODULE hSDLL=LoadLibraryA(S1.c_str());
ShowMessage(AnsiLastError());
if(hSDLL==NULL)
{
ShowMessage("dll не была загружена.");
return;
}
Хочу пояснить, почему был выбран такой путь. Дело в том, что просто:
C++
1
HMODULE hSDLL=LoadLibrary("d:\\MdlSearch.dll");
среда воспринимать не захотела, ругаясь на преобразование типов. Был вместе с LoadLibrary использован такой вариант преобразования:
C++
1
2
UnicodeString sTest="d:\\УЧЕБА\\РПК\\6l\\Win32\\Debug\\MdlSearch.dll";
const wchar_t * S=sTest.c_str();
который, собственно, тоже ни к чему не привёл.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2016, 19:39
Ответы с готовыми решениями:

Глобальный Хук и ошибка 126
Здравствуйте, помогите пожалуйста. Пытаюсь скопировать глобальный хук из этой программы в свою, и вроде бы всё просто (там уже есть...

СМА Candy GO 126 TXT 16S s 31001666 0722 0707, Ошибка Е05 после замены тена
Всех приветствую. При включении машинки сразу высвечивает ошибку Е05. Был заменен тен (был в утечке) Датчик температуры NTС 20кОм....

Ошибка обращения к wxruby "LoadError: 126"
Добрый день! Занялся изучением Ruby. OC Win7 x64 Установлено Ruby 2.2.4 (x32) + DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe с...

12
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.01.2016, 19:49
А случайно саму библиотеку regsvr32 регать не нужно ?
0
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
24.01.2016, 20:01  [ТС]
Да вроде нет. На сколько помню, обычные NativeDLL не регаются, да и точки входа для регистрации нет. Dependency Walker показывает только 2 экспортируемые процедуры:
_GetRequiredElement - та, которую и пытаюсь использовать;
___CPPdebugHook - не особо осведомлён, что это. Её C++ Builder всё время создаёт.

п.с.
Забыл добавить, в C++ Builder'е 6 DLL'ка грузится, проблемы возникают только в RAD Studio.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
24.01.2016, 20:25
Цитата Сообщение от neit95 Посмотреть сообщение
среда воспринимать не захотела, ругаясь на преобразование типов
А вот так?
C++
1
HMODULE hSDLL=LoadLibrary(L"d:\\MdlSearch.dll");

Не по теме:

У меня в ХЕ3 не ругается...

1
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
26.01.2016, 22:07  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
А вот так?
Этот способ устраняет строковый неадекват, но основную проблему не решает.
Сегодня решили проверить собрать dll в MinGW. Посмотрим, как он на это отреагирует. C++ рантайм вроде на всех компьютерах присутствует.

Добавлено через 9 часов 6 минут
Проверили dll из MinGW. Всё тоже самое. В чём ещё может быть проблема?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.01.2016, 08:46
Цитата Сообщение от neit95 Посмотреть сообщение
Не видит саму DLL (GetLastError упорно возвращает ошибку 126).
C++
1
2
HMODULE hSDLL=LoadLibraryA(S1.c_str());
ShowMessage(AnsiLastError());
Обсуждалось, и уже не раз.
GetLastError имеет смысл звать ТОЛЬКО в том случае, если функция
возвращает ошибку. В других случаях значение last error не определено.
То есть, там может быть "мусор", оставшийся от прошлых вызовов.
1
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
27.01.2016, 13:07  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
GetLastError имеет смысл звать ТОЛЬКО в том случае, если функция
возвращает ошибку.
Так LoadLibrary и возвращает NULL вместо указателя, что для неё является показателем ошибки.
0
6 / 6 / 2
Регистрация: 06.04.2011
Сообщений: 313
27.01.2016, 13:51
Может быть, текст ошибки что-то подскажет (SysErrorMessage(GetLastError()))?
0
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
27.01.2016, 16:18  [ТС]
Цитата Сообщение от vlad2 Посмотреть сообщение
Может быть, текст ошибки что-то подскажет (SysErrorMessage(GetLastError()))?
Ничего нового не подсказал: "Не найден указанный модуль". Об этом, собственно, и приведённый ранее номер ошибки говорил.

Добавлено через 24 минуты
Ещё интересных подробностей. Думал, что среда что-то изобретает, и решили попробовать загрузить что-нибудь системное, что по определению грузиться должно:
C++
1
HANDLE hKernel=LoadLibrary(L"kernel32.dll");
О результате думаю уже догадываетесь (а если нет, то всё тот же).

Добавлено через 17 минут
Ещё замечание, с GetModuleHandle та же история. Не может ли быть это каким-то косяком со строками?
0
6 / 6 / 2
Регистрация: 06.04.2011
Сообщений: 313
27.01.2016, 16:53
Цитата Сообщение от neit95 Посмотреть сообщение
О результате думаю уже догадываетесь (а если нет, то всё тот же)
Думаю, проблема в основной проге. Попробуйте сделать простенький тест: форма, кнопка и по кнопке ваши действия.
Только для отгрузки длл надо описать не HANDLE hKernel, а HMODULE hKernel.
У меня ХЕ7 и всё работает.
0
15 / 13 / 6
Регистрация: 24.02.2014
Сообщений: 93
28.01.2016, 17:47  [ТС]
Товарищи, всем спасибо. Проблему решили. Проблема была из разряда: "а ларчик просто открывался". Dll'ку передавали по ВК, поэтому пришлось переименовать в "*.dl". На принимающей стороне не подумали, что я её переименовал. В общем, проблема была именно в этом.
0
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 11
27.09.2022, 09:40
А подробнее можно? Что значит переименовать в *.dll ??
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
27.09.2022, 10:30
ELEA, поднять тему 6-тилетней давности только потому, что читать не умеем?
Цитата Сообщение от neit95 Посмотреть сообщение
пришлось переименовать в "*.dl"
Цитата Сообщение от ELEA Посмотреть сообщение
переименовать в *.dll
разницы не видите?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2022, 10:30
Помогаю со студенческими работами здесь

LoadLibrary()
Вызываю LoadLibrary() (файл dll4.dll лежит в каталоге экзешника) HMODULE hdll1 = LoadLibraryA("dll4.dll"); по...

LoadLibrary
Здравствуйте Нужно подгрузить мою .dll в память. #include <windows.h> HMODULE myDLL = LoadLibraryA("my.dll"); не...

LoadLibrary возвращает 0
Добрый вечер. Прошу помощи у знающих людей. Есть нативная dll,которую нужно использовать в шарпе. static class NativeMethods ...

[Решено] LoadLibrary
Здраствуйте. Сделал динамическую библиотеку в студии, загружал ее там же в консольное приложение с помощью LoadLibrary - все работает,...

Повесить хук на LoadLibrary
Добрых времени суток. Очень давно видел где-то информацию, что отследить инжект сторонней библиотеки в полезный процесс можно повесив хук...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru