2011-11-25 12 views
5

Estoy tratando de crear un archivo DLL que va a crear un hilo cuando lo cargue por alguna razón la función del hilo no está haciendo nada ..: \no puede llamar un hilo en el archivo DLL

Este es mi código :

dllthread! = Null ... ¿por qué no funciona?

#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; 
} 
+3

No hagas esto. Crear un hilo desde DllMain es una [mala idea] (http://blogs.msdn.com/b/oldnewthing/archive/2007/09/04/4731478.aspx). –

+0

¿Qué me estás sugiriendo que haga entonces? Necesito crear un hilo desde un archivo dll. – DanR

+0

Dan, ¿posee el origen de la aplicación en la que está cargada esta DLL? – hmjd

Respuesta

9

En lugar de comenzar el hilo de DllMain() exportar una función que lanzaría el hilo en su lugar:

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); 

} 

Después de llamar LoadLibrary() uso GetProcAddress() para obtener acceso a la función start_thread().

Espero que esto ayude.

+0

que resolvió el problema ¡gracias! :) – DanR

Cuestiones relacionadas