Чтобы описать проблемы у меня были бы слишком долго, но проблема на острый конец является:LoadLibraryW возвращается nullptr и GetLastError() возвращает 3221225619
LoadLibraryW терпит неудачу (возвращает nullptr) когда задан допустимый путь.
Монитор процесса не регистрирует никаких подозрительных сбоев или, действительно, ничего отличного от того, когда ему удастся загрузить DLL (что может быть в другом контексте).
У dll нет несистемных зависимостей.
... и хуже всего, код ошибки Windows, возвращаемый GetLastError является 3221225619.
Предполагая, что 3221225619 не является допустимым кодом ошибки, что может идти так неправильно, что Windows, Безразлично» t даже имеет код ошибки для этого?
EDIT:
Я думаю, что некоторые люди хотели более подробной информации о самой недостаточности:
- Это не кажется, вход - он идентичен в рабочем и неисправную версии, и LoadLibraryW успешно объявила, что «файл не существует», когда входная строка искалечена. Текущий вход имеет жестко закодированный вход, оставляя мало места для ошибки.
- dll скомпилирован в Release и код вызова в Debug. Я делаю это в течение 18 месяцев без проблем, но вы никогда не знаете.
- Пакет Process Monitor сообщает о 30 внутренних операциях, выполняемых в LoadLibraryW, включая CreateFile, LoadImage, RegOpenKey. Это идентичные для рабочего вызова и отказающего вызова, вплоть до размеров файлов и мест памяти.
- Нет очевидного повреждения памяти в объекте C++, вызывающем его, и, как я уже сказал, Process Monitor предоставляет одинаковый адрес базового изображения в обоих случаях.
- Несостоятельность 100% соответствует - в то же время, в том же месте каждый раз.
Что вы имеете на DllMain загружаемой библиотеки? –
Я просто вызываю его из исполняемого файла напрямую. –
Вы закодировали соответствующую DLL? –