GDI+ 对象释放崩溃的问题

原创 2013年12月03日 15:22:04

确保在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;
}

相关文章推荐

DLL中GDIPlus初始化和退出时注意的问题

转载的别人的文章,因为自己也在实际工程中遇到类似的问题。 DLL工程中使用GDIPlus 2009-08-04 14:51 前段时间项目的需求有所更改,因...

GDIplus的初次接触--加载并显示常用格式图片

在没有接触Gdiplus之前,在vc中绘制图片,通常加载一张位图,然后进行贴图。对于现在多种多样的图片格式,之前的GDI并不支持(应该是这样的,呵呵)。而使用Gdiplus则可以选择多种图片格式,比如...

使用GDI+进行图片处理时要注意的问题

使用GDI+进行图片处理时要注意的问题

GDI+对象的释放

    像包装了文件句柄和数据库连接等非托管资源的类需要特殊处理以确保其资源被适当地释放一样,Pen、Brush和其他代表图形基元的GDI+类也在此范畴之内,因为他们包装了GDI+的句柄。如果关闭GD...
  • jianbao
  • jianbao
  • 2006年12月15日 10:26
  • 3757

VC加载初始化GDI+方法

1. MFC Dialog工程加载GDI+方法 (1) stdafx.h 文件中添加代码: #include //将GDI+头文件加入到工程中 #pragma com...

[C/C++]_[初级]_[关于Gdiplus::Bitmap使用的注意事项]

场景1.我们一般使用 Gdiplus::Bitmap 来存储图像数据, 使用shared_ptr来对 Gdiplus::Bitmap 进行封装, 达到使用引用计数共享图像对象, 减少内存占用的目的.2...

gdiplus函数调用错误导致程序Crash分析

前几天帮其他team看一个Crash的问题,下面是问题分析.复现问题,获得如下log.4aea74b2 ??              ???0:006> kbChildEBP RetAddr  Ar...

vb.net GDI+入门——使用Graphics对象填充图形

上一章我们了解如何使用Graphics对象来绘制由点和线构成的线图《vb.net GDI+入门——使用Graphics对象绘制线图》,在实际绘图中,我们还需要使用色块等来填充图形,这一章, 就来看如...

vb.net GDI+入门——创建 Graphics 对象

我们用GDI+创建绘图,必须先创建Graphics对象,然后才可以使用GDI+的笔、刷等结合Color、Font等对象进行绘制线条形状、填充区域、显示文本图像等操作。Graphices 对象表示GDI...

用GDI+实现BMP位图转JPG位图(及com对象IPicture转jpg)

用GDI+实现BMP位图转JPG位图(及com对象IPicture转jpg)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GDI+ 对象释放崩溃的问题
举报原因:
原因补充:

(最多只允许输入30个字)