在我的程序之中用了:
AFX_THREADPROC Func = ShowSettingDlg;
AfxBeginThread(Func, NULL);
之后编译,一切正常,没有错误,但卡在“正在注册输出...”环节,不动了。若把AfxBeginThread去掉之后,就又顺利编译输出。这是怎么回事??

解决方案 »

  1.   

    UINT ShowSettingDlg (LPVOID lpParam)
    {
    bDlgShow = true;
    AFX_MANAGE_STATE(AfxGetStaticModuleState(   ));
    pFilterParam->m_pProp = new CDlgProp();
    pFilterParam->m_pProp->m_psh.dwFlags |= PSH_NOAPPLYNOW;
    pFilterParam->m_pProp->DoModal();
    bDlgShow = false;
    return 0;
    }但是即使有问题,也应该是编译不通过,但它通过了编译却卡在注册输出上,这有关系吗?
    PS:IDE为VS2008
      

  2.   

    UINT __cdecl MyControllingFunction( LPVOID pParam ); 
    改下调用约定
      

  3.   

    还是不行,加了__cdecl 也不能解决问题。
      

  4.   

    声明与定义都添加了。
    是在DLL里。
    因为DoModal()方法是要在对话框关闭之后才能继续下面的代码,而我要这个对话框与下面的算法并行,并能随时控制参数。
      

  5.   

    你不会是写在DLL里的PROCESS_ATTACH里面把?
      

  6.   

    为什么会造成死锁?我通过编译了啊正在生成代码
    已完成代码的生成
    正在嵌入清单...
    正在注册输出...等待ing
      

  7.   

    那还有什么方法能替代我的方案?
    我想让DLL一加载就显示对话框直到DLL卸载。
      

  8.   

    直接在dllmain函数中不行吗?不使用多线程。或者定义一个全局变量,在构造函数中调用,创建显示对话框
      

  9.   

    问题解决了。原因是IDE在注册的时候会调用DllMain。而AfxBeginThread的延续时间太长,导致无法正常注册。
    在这里我感谢大家的帮助。