Правильная выгрузка DLL

155
20 июня 2018, 22:00

Делаю следующие события:

  1. Есть мое приложение, в "запущенном виде".
  2. Я в это приложение делаю инъекцию "DLL".
  3. Отлаживаю баги, смотрю нужные мне штуки.
  4. Выгружаю DLL из приложения.

Вопрос вот в чем, как правильно выгрузить эту DLL, делаю так:

void StartThread(const HINSTANCE& hinstDLL) {
//...манипуляции с приложением..
    while (условие_какое-то)
    {
        Sleep(1);
    }
    FreeLibraryAndExitThread(hinstDLL, 0);
}
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH://Вызывается первым 
        StartThread(hinstDLL);
        return 1;
    case DLL_PROCESS_DETACH://вызывается после освобождения библиотеки
        break;
    case DLL_THREAD_ATTACH://вызывается при создании потока
        break;
    case DLL_THREAD_DETACH://вызывается после разрушения потока
        break;
    }
    return TRUE;
}

Вроде бы выгружает корректно, но я не уверен что все делаю правильно, пожалуйста подскажите правильную последовательность событий.

Answer 1

Операционная система самостоятельно следит за загруженными библиотеками. И если в программе подключается библиотека , ОС загружает ее в память и предоставляет различным программа. Поэтому в программе нет необходимости выгружать библиотеку.

READ ALSO
No match 'operator = ' in std::vector

No match 'operator = ' in std::vector

Всем доброго вечера!

196
Не присваивается значение char

Не присваивается значение char

Не присваивается значение элементам структуры типа char

212
Удалить / добавить значение из флагов

Удалить / добавить значение из флагов

Какими из операторов можно проверить присутствие флага, и удалить его если он есть, в противном случае добавить?

173