zoukankan      html  css  js  c++  java
  • GDI+ 对象释放崩溃的问题

    确保在Gdiplus::GdiplusShutdown(m_gdiplusToken); 之前delete 掉GDI+的对象,例如:delete *pBitmap;

    如果先Gdiplus::GdiplusShutdown(m_gdiplusToken);再delete *pBitmap; 程序会崩溃。

    有时候会为了方便误将Gdiplus::GdiplusShutdown(m_gdiplusToken)先释放了,为了确保这种情况
    在MFC中尽量按下面方式释放:
    int CXXXApp:: ExitInitInstance()
    {
    GdiplusShutdown(m_GdiplusToken);
    return CWinApp:: ExitInstance();

    }


    在WTL中释放:

    GdiplusStartupInput   m_gdiplusStartupInput;
    ULONG_PTR             m_gdiplusToken;
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
    {
    	HRESULT hRes = ::CoInitialize(NULL);
    //	HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    	ATLASSERT(SUCCEEDED(hRes));
    
          Gdiplus::GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
    
    	::DefWindowProc(NULL, 0, 0, 0L);
    
    
    	AtlInitCommonControls(ICC_BAR_CLASSES);	// add flags to support other controls
    
    
    	hRes = _Module.Init(NULL, hInstance);
    	ATLASSERT(SUCCEEDED(hRes));
    
    
    	int nRet = Run(lpstrCmdLine, nCmdShow);
    
    
    	_Module.Term();
    	::CoUninitialize();
        Gdiplus::GdiplusShutdown(m_gdiplusToken);
    	return nRet;
    }

  • 相关阅读:
    codeforces-1139 (div2)
    codeforces-1140 (div2)
    codeforces-1141 (div3)
    第四届CCCC团体程序设计天梯赛 后记
    BZOJ 3674 可持久化并查集
    你能回答这些问题吗
    [JSOI2008]最大数
    关路灯
    愤怒的小鸟
    推销员
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4454249.html
Copyright © 2011-2022 走看看