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;
    }

  • 相关阅读:
    2016第17周四
    2016第17周三
    2016第17周二
    OSGI框架学习
    2016年第16周日
    2016第16周六
    如何培养技术洞见力
    2016第15周四
    深入浅出ClassLoader
    Linux智能小开关rfkill
  • 原文地址:https://www.cnblogs.com/yuzhould/p/4454249.html
Copyright © 2011-2022 走看看