невозможно вызвать поток в файл DLL - PullRequest
6 голосов
/ 26 ноября 2011

Я пытаюсь создать dll, которая создаст поток, когда вы по какой-то причине загружаете его, функция потока ничего не делает ..: \

это мой код:

dllthread! = null .. почему не работает?

#include "stdafx.h"
DWORD WINAPI ThreadProc(
  __in  LPVOID lpParameter
)
{

    std::ofstream myfile;
    myfile.open ("example.txt");
    myfile << "Writing this to a file.\n";
    myfile.close();

    return 0;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{

    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:    
        DWORD DllThreadID;
        HANDLE DllThread; //thread's handle

        DllThread=CreateThread(NULL,0,&ThreadProc,0,0,&DllThreadID);
// 
        if (DllThread == NULL)
            MessageBox(NULL, L"Error", L"Error", MB_OK);

        CloseHandle(DllThread);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:


        break;
    }
    return TRUE;
}

1 Ответ

11 голосов
/ 26 ноября 2011

Вместо запуска потока из DllMain() экспортируйте функцию, которая запустит поток вместо:

extern "C" __declspec(dllexport) void start_thread()
{
    DWORD DllThreadID;
    HANDLE DllThread; //thread's handle

    DllThread=CreateThread(NULL,0,ThreadProc,0,0,&DllThreadID);
    if (DllThread == NULL)
        MessageBox(NULL, L"Error", L"Error", MB_OK);
    else
        CloseHandle(DllThread);

}

После вызова LoadLibrary() используйте GetProcAddress(), чтобы получить доступ к функции start_thread().

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...