我在dll(mfc扩展)中增加了一个对话框,然后在其中一个函数中弹出此对话框,
结果出错,但是用AfxMessageBox就没问题。这是什么原因?可以弹出自定义的对话框吗?

解决方案 »

  1.   

    没有问题,用AfxMessageBox没错的
      

  2.   

    可是为什么以下代码运行时出错?去掉就没问题。
    HINSTANCE hInstResourceClient = AfxGetResourceHandle();
    AfxSetResourceHandle(::GetModuleHandle("pophook.dll"));
    CDlgPopHook dlg;
    if(dlg.DoModal()==IDOK)
    {
    running=FALSE;
    return TRUE;
    }
    AfxSetResourceHandle(hInstResourceClient);
    如果换成AfxMessageBox()也没问题。
    如果在dlg.DoModal()之前加上
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    编译就会出错:
    mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in PopHook.obj
    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in PopHook.obj
    mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in PopHook.obj
    还请高手指点!!!
      

  3.   

    我这样做
    class AFX_EXT_CLASS CDlgPopHook : public CDialog
    {
    ...
    }
    编译还是一样的错误。
      

  4.   

    另外,补充一点:这个dll是个系统hook
      

  5.   

    我也试过在dll中弹出对话框,但没成功。
    后来用ATL把它做成一个com 就ok了。
    试试。
      

  6.   

    你要CreateDialog吧?这么直接好像不行。最好用new 声明对象不太好
      

  7.   

    回runner:
    我只想弹出一个模态对话框,不是非模态。
    回wujingang:
    怎么那么麻烦?
    有没有简单一点的办法?继续向高手请教!
      

  8.   

    HINSTANCE hInstResourceClient = AfxGetResourceHandle();{
      AfxSetResourceHandle(::GetModuleHandle("pophook.dll"));
      CDlgPopHook dlg;
      if(dlg.DoModal()==IDOK)
      {
       running=FALSE;
      }
      AfxSetResourceHandle(hInstResourceClient);
    }
    return TRUE;
      

  9.   

    在调用前加上
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

  10.   

    還有一個可能,您使用了Release version (exe/dll)呼叫了Debug version DLL