bibitka
Определенно, я тут не гуру языка, но разве освободить всю память и анхункуть != выгрузить длл ? Так как физически длл в процессе больше нет и всё работает так же, будто её и не было. Я перечислил основные "правила", как произвести анлоад для новичков ( тех, кто хоть слегка шарит в плюсах и умеет думать головой, им то это вполне моет быть полез ).
Про остальное я промолчу, потому что ясное дело я тут не хвх биг бой кодер с 2013. Но единственный момент не очень понятен. По поводу кастования в HMODULE. Аргумент для основного потока - LPVOID lpReserved, а при создании потока через CreateThread(0, 0, main, hModule, 0, 0) В качестве аргумента для функции main идёт тот HMODULE hModule из DllMain'а. Порывшись в интернете можно найти объяснение этого самого типа LPVOID - указатель на любой тип. Соответственно передавая в качестве аргумента HMODULE и потом кастуя его обрано в него же мы не получим хлопка вселенной и всё будет нормально