Почему я получаю & quot; LoaderLock & quot; Обнаружение?

я вызываю DLL C ++ (не мой код) из моего кода C #, используя мой P / Invoked LoadLibrary API. но когда я запускаю приложение, обнаруживается ошибка LoaderLock.

сначала я виню в этом мои обертки DllImport C #, но когда я пытаюсь загрузить другую C ++ DLL, она работает нормально.

Я прочитал несколько статей в Интернете, касающихся LoaderLock, и кажется, что правило № 1 — не делать ничего смешного в DllMain. и когда я проверил, C ++ DllMain вызывает некоторые API в DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH.

BOOL APIENTRY DllMain(
HANDLE  hModule,
DWORD   ul_reason_for_call,
LPVOID  lpReserved )
{
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:

StartAPI();
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;

case DLL_PROCESS_DETACH:

ExitAPI();
break;
}
return true;
}

когда я проверил StartAPI (), он имеет большой кусок кода и вызывает функцию, которая создает процесс, используя CreateProccessA

это реальная причина, почему я получаю ошибку LoaderLock?

Мне сказали, что StartAPI () должен запускаться после инициализации DLL, есть ли другой способ заставить эту работу?

Я планировал вызвать StartAPI () в другом потоке, но я прочитал, что создание потока внутри DllMain также является рецептом для катастрофы.

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector