想在dll(mfc扩展)中弹出一个自定义的对话框(在dll中添加的),代码如下,运行时出错。
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
还请高手指点!!!

解决方案 »

  1.   

    HINSTANCE hInstResourceClient = AfxGetResourceHandle();
    AfxSetResourceHandle(::GetModuleHandle("pophook.dll"));
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDlgPopHook dlg;
    if(dlg.DoModal()==IDOK)
    {
    running=FALSE;
    return TRUE;
    }
    AfxSetResourceHandle(hInstResourceClient);
    只要这样就可以了吧
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDlgPopHook dlg;
    if(dlg.DoModal()==IDOK)
    {
    running=FALSE;
    return TRUE;
    }
      

  2.   

    回hahu:
    你那种方法我也试过,编译错误。
    补充一点:这个dll是个系统hook