Перейти к содержанию

Проблема с созданием потока(DllMain)


Рекомендуемые сообщения

Проблема в том, что не получается открыть поток в dll, приложение крашится.

Изначально все скатал под чистУю у кодера (в уроке):


#include <Windows.h>

DWORD WINAPI Thread();

bool APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
if (ul_reason_for_call == DLL_PROCESS_ATTACH){
CreateThread(NULL, NULL, Thread, NULL, NULL, NULL);
}
}
DWORD WINAPI Thread(){
//Do something
return S_OK;
}

Потом полез в инет и нашёл фразу "За исключением периода инициализации", то есть как я понял в самом DllMain нельзя задерживаться и поток надо создавать отдельно поэтому написал вот так:


#include <Windows.h>
DWORD WINAPI Thread();
void CreateThrd(){
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Thread, NULL, NULL, NULL);
return;
}

bool APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
if (ul_reason_for_call == DLL_PROCESS_ATTACH){
CreateThrd();
}
}
DWORD WINAPI Thread(){
for (;;Sleep(1000)){
MessageBox(NULL, "Msg from thread", MB_OK, NULL);
}
return S_OK;
}

Но и это тоже к сожалению не проканало, кстати меседжбокс не вылез.

Где то ещё было про какие-то обозначения или метки выхода из потока, но это я не вкурил.

Кто знает в чем трабла?

UPD. Странно, но проблема решилась куда более простым путём: тупо забыл указать возвращаемое значение в ф-ции DllMain.

Но теперь интересует обратный вопрос, почему когда на мсдне пишут что создавать потоки нельзя, тут такой беспредел творится? (MSDN)

Ссылка на комментарий
Поделиться на другие сайты

DllMain должна вернуть значение 1.

Если возвращается значение 0, то dll выгружается из программы.

И ты смотришь MFC, а не голый C++/

Да, разобрался, спасибо

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.