写了一个IE的BHO插件,只打开一个IE窗口时,没有任何问题.但是当打开一个以上IE窗口时,每关闭一个窗口就会出现"内存不能为read"错误,烦请高手提示一下问题会出在哪?

解决方案 »

  1.   

    1、内存泄漏
    2、QUIT代码有问题
      

  2.   

    "内存不能为read"错误?
    一般来说会有一个崩溃地址,结合生成的.map文件查找出错的代码在哪。
      

  3.   

    我在DllMain的DLL_PROCESS_ATTACH里初始化CPlayer这个类并分配给g_pPlayer全局变量,在DLL_PROCESS_DETACH里delete g_pPlayer.问题就在delete g_pPlayer,如果不加这句就不会出错,加了这句就会出现内存错误,而我把CPlayer类的析构函数全部注释掉也是同样的错误.下面附上相关代码:
    ====================================
    CPlayer *g_pPlayer;    // 全局变量extern "C"
    BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
    {
        if (dwReason == DLL_PROCESS_ATTACH) {
            TCHAR pszLoader[MAX_PATH];
            ::GetModuleFileName(NULL, pszLoader, MAX_PATH);
            _tcslwr(pszLoader);
            if (_tcsstr(pszLoader, _T("explorer.exe"))) {
                return FALSE;
            }        g_pPlayer = new CPlayer();        _Module.Init(ObjectMap, hInstance, &LIBID_KMEDIALib);
            DisableThreadLibraryCalls(hInstance);
        } else if (dwReason == DLL_PROCESS_DETACH) {
            if (g_pPlayer) delete g_pPlayer;    // 加了这句就会内存出错
            _Module.Term();
        }
        return TRUE;
    }
      

  4.   

    你这个思路是COM编程吗?怎么没用引用计数来自动析构?别的IE窗口在用着,你怎么能删除这个对象?