谢谢

解决方案 »

  1.   

    可以在DLL_PROCESS_ATTACH事件触发时创建线程调用你的函数
      

  2.   

    创建线程的目的主要是防止你的函数里出现调用模式对话框的函数把宿主进程阻塞掉DWORD WINAPI ThreadProc(LPVOID lpParameter);extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
    {
    TRACE0("My.DLL Initializing!\n");

    // Extension DLL one-time initialization
    if (!AfxInitExtensionModule(MyDll, hInstance))
    return 0;
    // Insert this DLL into the resource chain
    // NOTE: If this Extension DLL is being implicitly linked to by
    //  an MFC Regular DLL (such as an ActiveX Control)
    //  instead of an MFC application, then you will want to
    //  remove this line from DllMain and put it in a separate
    //  function exported from this Extension DLL.  The Regular DLL
    //  that uses this Extension DLL should then explicitly call that
    //  function to initialize this Extension DLL.  Otherwise,
    //  the CDynLinkLibrary object will not be attached to the
    //  Regular DLL's resource chain, and serious problems will
    //  result. new CDynLinkLibrary(MyDll);
    DWORD threadid;
    ::CreateThread(NULL,NULL,ThreadProc,NULL,0,&threadid);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    TRACE0("My.DLL Terminating!\n");
    // Terminate the library before destructors are called
    AfxTermExtensionModule(MyDll);
    }
    return 1;   // ok
    }
    DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {
    //调用你的函数
    }