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

Проблема с созданием потока(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)

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

  В 10.07.2014 в 12:31, Coder сказал:

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

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

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

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

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

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

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

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