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

转载 2012年03月29日 14:23:28
转载的别人的文章,因为自己也在实际工程中遇到类似的问题。

DLL工程中使用GDIPlus
2009-08-04 14:51

前段时间项目的需求有所更改,因此我将工程中部分GDI改为了GDI+,主要是为了增加图片格式的支持,没时间看东西了,而因为我以前对于GDI+比较熟,所以就直接用GDI+了。

一开始在几个工程的Dllmain中添加Gdiplus的GdiplusStartup和GdiplusShutdown,不过发现在生成时 注册输出一步老卡在那里不动,必须手动取消生成。在使用上倒没遇到什么大问题,因此也就暂时扔那里了。

今天工作暂告一段落,就来分析这个问题。首先定位到是gdiplus引起的,而后搜索了不少资料,发现是对于GDI+的初始化有问题,在dll工程中不能在dllmain文件中进行GDI+的初始化。

详见http://msdn.microsoft.com/en-us/library/ms534077(VS.85).aspx

Remarks 

You must call GdiplusStartup before you create any GDI+ objects, and you must delete all of your GDI+ objects (or have them go out of scope) before you call GdiplusShutdown. 

You can call GdiplusStartup on one thread and call GdiplusShutdown on another thread as long as you delete all of your GDI+ objects (or have them go out of scope) before you call GdiplusShutdown. 

Do not call GdiplusStartup or GdiplusShutdown in DllMain or in any function that is called by DllMain. If you want to create a DLL that uses GDI+, you should use one of the following techniques to initialize GDI+: 


Require your clients to call GdiplusStartup before they call the functions in your DLL and to call GdiplusShutdown when they have finished using your DLL. 
Export your own startup function that calls GdiplusStartup and your own shutdown function that calls GdiplusShutdown. Require your clients to call your startup function before they call other functions in your DLL and to call your shutdown function when they have finished using your DLL. 
Call GdiplusStartup and GdiplusShutdown in each of your functions that make GDI+ calls.

相关文章推荐

GDI+ 对象释放崩溃的问题

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

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

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

无法加载 DLL gdiplus.dll 的问题解决方法-asp.net

无法加载 DLL gdiplus.dll 的问题解决方法-asp.net 老问题了,结果过了几年都没有法子解决吗? 服务器已经打了这个补丁,部署了一个.net系统,结果就提示:...
  • tgh1981
  • tgh1981
  • 2011年04月22日 22:09
  • 2547

GdiPlus.dll

  • 2008年11月13日 19:32
  • 901KB
  • 下载

gdiplus.dll

  • 2008年02月19日 20:25
  • 1.57MB
  • 下载

多线程 DLL 回调函数问题,当应用程序退出时,有些操作并未完成,造成程序内存泄露,如何解决呢

问题描述如下:  现在有一个DLL库,里面定义了一个线程,线程里面又调用了应用程序中定义的回调函数,这样当应用程序退出时,应用程序中的回调函数还没有执行完毕,停在中间了,造成程序内存泄露,Debug内...

GdiPlus.dll

  • 2009年01月08日 14:00
  • 832KB
  • 下载

GDI+编程基础(关于gdiplus.dll)

  • 2010年11月21日 22:39
  • 2.08MB
  • 下载

_stdcall与_cdecl区别 (QT 加载MFC的dll时,要注意的"_stdcall"或者CALLBACK的问题)

转载自  http://blog.csdn.net/leehong2005/article/details/8607536 看到这篇好文章,帮了我很大忙,直接转载过来了。 查看全文,请跳转上面...

gdiplus.dll

  • 2013年01月18日 23:01
  • 793KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DLL中GDIPlus初始化和退出时注意的问题
举报原因:
原因补充:

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