Исключение при загрузке dll C# во дополнительный поток в C++ MFC

У меня есть консольное приложение .NET Framework 4.8 и тестовый проект в той же платформе на C#, которые используют некоторые библиотеки DLL со следующей структурой:

Dll С++ находится в MFC.

Проблема заключается в следующем:

Сценарий A -> Если я запускаю тестовую dll, все dll зависимостей загружаются правильно (я вижу их из модулей в VS) и в основном потоке CCC.dll я могу правильно выполнить метод в DDD.dll, который реализован в EEE.dll.

Сценарий B -> Если я вызываю тот же метод из рабочего потока CWinThread, когда я вызываю тот же метод в DDD.dll, у меня возникают следующие исключения:

Microsoft C++ exception: EEFileLoadException at memory location 0x000000A6FD9FA230

Could not load file or assembly 'DDD.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified

Также в этом случае, если я проверю загруженные модули в VS, то вижу, что DDD.dll и EEE.dll загружены правильно. Я не понимаю, почему он пытается загрузить DDD.dll еще раз (и почему не находит). Я пытался использовать AFX_MANAGE_STATE(AfxGetStaticModuleState()); в заголовке своего метода, где я вызываю метод в DDD.dll, но это не решает мою проблему.

Сценарий C -> Если я запускаю сценарии A и B из консольного приложения, все работает нормально, и у меня нет исключений.

call the same method from a worker thread CWinThread Можете ли вы предоставить минимальный воспроизводимый образец?
Minxin Yu - MSFT 04.07.2024 03:05

Используете ли вы COM во втором потоке? Если да, то инициализируете ли вы COM во втором потоке?

Joseph Willcoxson 06.07.2024 00:41

Я нашел проблему. Я понимаю, что рабочий поток C++ может иметь домен приложения, отличный от домена приложения. Поскольку поток С# не имеет этой «функции», я попытался создать рабочий поток на С# через С++/cli. В этом случае AppDomain такой же, как и у приложения, и у меня больше нет ошибок при загрузке библиотеки.

Daniele 08.07.2024 16:52

Рады узнать, что ваша проблема решена! Пожалуйста, расценивайте сообщение как ответ. Смотрите Могу ли я ответить на свой вопрос?

Minxin Yu - MSFT 10.07.2024 09:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел проблему. Я понимаю, что рабочий поток C++ может иметь домен приложения, отличный от домена приложения. Поскольку поток С# не имеет этой «функции», я попытался создать рабочий поток на С# через С++/cli. В этом случае AppDomain такой же, как и у приложения, и у меня больше нет ошибок при загрузке библиотеки.

Другие вопросы по теме