Рейтинг:
0
Coder969
Спасибо за ответ. Я проверил связь .Я периодически сталкиваюсь с сбоем приложения с ERROR_DLL_INIT_FAILED . У меня есть проект c#, который загружает управляемую cpp dll. управляемая Cpp dll будет загружать стороннюю собственную cpp dll (не используя функцию загрузки библиотеки для загрузки собственной cpp dll , используя заголовочный файл и файл lib). При создании объекта для управляемой библиотеки DLL cpp приложение C# выбрасывает исключение с кодом ошибки 1114. Исходя из ошибки, могу ли я предположить, что собственная функция dll dllmain возвращает false?
Richard MacCutchan
Вы можете предполагать все, что угодно, но это не лучший способ диагностировать проблемы. Вы должны использовать отладчик, чтобы точно проследить, где и, надеюсь, почему генерируется ошибка.
Coder969
Я занимаюсь отладкой и тем временем опубликовал вопрос, чтобы получить некоторые подсказки :)
Richard MacCutchan
Без дополнительной информации невозможно предложить что-либо еще.
Coder969
Извините, что не опубликовал исходную ошибку. Я подумал, что это может быть проблема с функцией dllMain в одной из моих dll-библиотек.
Мое приложение периодически выходит из строя . Я сделал отладку через windbg, и она показывает ошибку в clr .Ниже приведен журнал регистрации от windbg
FAULTING_IP:
clr!GetMetaDataInternalInterfaceFrompublic+25e75
6e7256fa f70000000080 тест dword ptr [eax],80000000h
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffffff)
ExceptionAddress: 6e7256fa (clr!GetMetaDataInternalInterfaceFrompublic+0x00025e75)
Код исключения: c0000005 (нарушение доступа)
ExceptionFlags: 00000000
Количество параметров: 2
Параметр[0]: 00000000
Параметр[1]: 6bd15370
Попытка чтения с адреса 6bd15370
FAULTING_THREAD: 00000c8c
DEFAULT_BUCKET_ID: INVALID_POINTER_READ
Имя процесса: application.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - инструкция в 0x%08lx ссылается на память в 0x%08lx. Память не может быть %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - инструкция в 0x%08lx ссылается на память в 0x%08lx. Память не может быть %s.
EXCEPTION_PARAMETER1: 00000000
EXCEPTION_PARAMETER2: 6bd15370
READ_ADDRESS: 6bd15370
FOLLOWUP_IP:
clr!GetMetaDataInternalInterfaceFrompublic+25e75
6e7256fa f70000000080 тест dword ptr [eax],80000000h
MOD_LIST: <анализ>
NTGLOBALFLAG: 70
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK:
Функция SP IP
00000000 00000001 App_config_1a0000!Приложение.Прочитать()+0х2
002EF438 0040174B App_config_1a0000!Application.Re()+0xc3
002EF460 00400081 App_config!Приложение.Main()+0x31
StackTraceString: <none>
Значение HRESULT: 8007045a
EXCEPTION_OBJECT: !pe 18f41f8
Объект исключения: 018f41f8
Тип исключения: System.IO.FileLoadException
Сообщение: не удалось загрузить файл или сборку 'ManagedCPP.dll-или одна из его зависимостей. Не удалось выполнить процедуру инициализации библиотеки динамических ссылок (DLL). (Исключение из HRESULT: 0x8007045A)
InnerException: <none>
Трассировка стека (автоматически):
Функция SP IP
00000000 00000001 App_config_1a0000!Приложение.Прочитать()+0х2
002EF438 0040174B App_config_1a0000!Application.Re()+0xc3
002EF460 00400081 App_config!Приложение.Main()+0x31
Из журнала windbg я увидел нарушение доступа из clr, и после этого он показывает проблемы с загрузкой dll. Это потому, что clr crash dll не загружается?
Richard MacCutchan
Message: Could not load file or assembly 'ManagedCPP.dll' or one of its dependencies. A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A)
Находится ли эта библиотека dll в правильном месте, чтобы загрузчик мог ее найти? Вы пытаетесь загрузить 64-битную dll в 32-битное приложение или наоборот и т. д.?
Coder969
Библиотека dll помещается в ту же папку . Как компилировать в 32-битные приложения.
Я периодически сталкиваюсь с этой проблемой
Richard MacCutchan
Извините, но здесь действительно больше никто ничего не может сделать. Вам нужно найти какой-то способ захватить больше деталей, когда проблема действительно происходит.
Coder969
Мы смогли найти эту проблему. Похоже, что два бывших загружаются на один и тот же адрес мемов. Изменения доли адрес на карте Исправлена проблема