最近碰到一个问题我用的是evc
是一个dll工程
dllmain函数启动的时候,在这个函数里写AfxMessageBox;以及在这个函数中调用另一个函数,且函数中也有使用AfxMessageBox来弹出提示对话框编译通过然而在执行的时候,发现,每次只要有地方调用这个dll,就是说在dllmain函数执行的时候,就会出现死机现象,程序走不下去,鼠标指针是在load的状态想知道是什么原因

解决方案 »

  1.   

    你都在dllmain里边做了什么啊?
      

  2.   

    不要在dllmain里面加AfxMessageBox,这样会导致消息阻塞,而且还有dll初始化也不成功。你loadlibray的时候就要执行dllmain了,你可以设置一个延时,等dll初始化结束,或者起一个线程,不过微软建议不要在dllmain等一些初始化过程中加代码
      

  3.   

    to:pomelowu(羽战士)
    这个dll中需要用到一些初始化的设置,这些设置是从配置文件中获得,所以我就写了一个函数在dllmain中调用to:jacklzw88(不可爱咯) 
    能说一下为什么不建议在dllmain函数中加代码的原因吗dll在被load的时候,可以通过(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)中第二个参数判断是DLL_PROCESS_ATTACH等状态,就可以在第一次被load的时候初始化一些全局变量,这样不是挺好的吗
      

  4.   

    Warning  There are serious limits on what you can do in a DLL entry point. To provide more complex initialization, create an initialization routine for the DLL. You can require applications to call the initialization routine before calling any other routines in the DLL. Alternatively, the initialization routine can create a file with an ACL that restricts access, and each routine in the DLL would call the initialization routine if the file does not exist.AfxMessageBox会引起线程阻塞,不过让dllmain阻塞倒是没注意过jacklzw88(不可爱咯) 确定吗?lz你放断点进去看看问题出在什么地方呢?屏蔽一下AfxMessageBox试试看呢
      

  5.   

    可能是MessageBox弹到后台去了吧?改成:
    MessageBox(m_hWnd, _T(""),_T(""),MB_OK | MB_TOPMOST );试试