You can not call DLLMain in DLLMain. You should not block DLLMain with a message pump.

解决方案 »

  1.   

    不要在InitInstance()创建窗口。。
    在InitInstance() 里创建一个UI线程,在这个线程里创建窗口。
      

  2.   

    我试过在InitInstance()创建线程,在现正中创建窗口啊,但是窗口显示不出来,用DoMadal也显示不出来,但是我在线程函数里面加个MessageBox,能弹出来,什么原因呢?
    下面是我的线程函数
    UINT _stdcall ThreadFunc(LPVOID lpParam)
    {

    m_CHookDlg.Create(IDD_HOOKDIALOG,NULL);
    HWND hDlgModeless=m_CHookDlg.GetSafeHwnd();
    m_CHookDlg.ShowWindow(SW_SHOW);
    UpdateWindow(m_CHookDlg.m_hWnd);
    //MessageBox(NULL,"dsf","adf",0);
    MSG msg;
    while(::GetMessage(&msg,NULL,0,0))
    { if(hDlgModeless==0||!::IsDialogMessage(hDlgModeless,&msg))
    {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);

    }

    }
    m_CHookDlg.DestroyWindow();
    return 0;

    }在InitInstance()中调用代码为
    BOOL CGameDllApp::InitInstance() 
    {
    // TODO: Add your specialized code here and/or call the base class
    ::CloseHandle((HANDLE)::_beginthreadex(NULL,0,ThreadFunc,NULL,0,&dwThreadID));
             return TRUE
    }
      

  3.   

    你的不是UI线程。。我自己做过,肯定行的。。只要使用UI线程。
      

  4.   

    为什么一定要有如下代码?没有不行吗?
    while(::GetMessage(&msg,NULL,0,0))
         {if(hDlgModeless==0||!::IsDialogMessage(hDlgModeless,&msg))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);}}
    非模式对话框,除非destroy,否则会一直显示的。
      

  5.   

    看这个:http://blog.csdn.net/gnuljf/archive/2007/11/28/1906291.aspx
      

  6.   

    1.确认你的工程是MFC扩展DLL
    2.必要时使用AfxGetResourceHandle和AfxSetResourceHandle来切换资源句柄