BHO的实现。VC中ATL工程,支持MFC的,想只加载ie,不加载我的电脑。
如果不支持MFC,有dllMain可以控制,但是支持MFC的没有dllmain,
在initInstance中加入如下代码:BOOL CIEProtectorApp::InitInstance()
{
TCHAR Loader[MAX_PATH];
GetModuleFileName(NULL,Loader,MAX_PATH);
for(int i = lstrlen(Loader);i>0;i--)
{
if(Loader[i]==_T('\\'))
{
lstrcpy(Loader,Loader+i+1);
break;
}
}
if(lstrcmpi(_strlwr(Loader),_T("iexplore.exe"))!=0&&lstrcmpi(_strlwr(Loader),_T("regsvr32.exe"))!=0)
{
return FALSE;
}
_Module.Init(ObjectMap, m_hInstance, &LIBID_IEPROTECTORLib);
  return CWinApp::InitInstance();

}
打开ie正常,但是打开我的电脑时atlbase.h中5668行,ATLASSERT(pM->m_hInst != NULL);
出错,但是选择ignore我的电脑能正常打开?
不知道什么原因,注释掉atlbase.h中的ATLASSERT(pM->m_hInst != NULL);没发现不正常现象,
请问怎么才能解决?

解决方案 »

  1.   

    可能是因为你没有调CWinApp::InitInstance();
      

  2.   

    在DllMain()中添加if (dwReason == DLL_PROCESS_ATTACH)
    {
    TCHAR pszLoader[MAX_PATH];
    GetModuleFileName(NULL, pszLoader, MAX_PATH);
    _tcslwr(pszLoader);
    if (_tcsstr(pszLoader, _T("explorer.exe"))) 
       return FALSE;
    }
      

  3.   

    跟一下这句_Module.Init(ObjectMap, m_hInstance, &LIBID_IEPROTECTORLib);
     m_hInstance 为 0 ?
    可能m_hInstance还没赋值
      

  4.   

    to: lion_wing(血舞尖刀) 我也遇到过这问题,去掉一个编绎选项就OK了!
    请问是哪一个编译选项呢?to: firmbird(firmbird):  支持mFC的没有dllMain()!!!!to:yongdu()  怎么赋值呢?