[GDI+] GdiPlus在dll中的初始化位置

来源:互联网 发布:手机淘宝6.2.0官方版 编辑:程序博客网 时间:2024/06/06 05:38

GDI+的初始化和反初始化  是调用GdiplusStartup 和 GdiplusShutdown
如果dll中使用了GDI+,GDI+的初始化应该放在哪里?可以放在DllMain()中吗?

答案是:不可以。

按照MSDN的说法 这种情况下 常用以下方法进行初始化:
1、在应用层中调用GdiplusStartup 和 GdiplusShutdown
2、dll导出API, 在API中执行GdiplusStartup 和 GdiplusShutdown,由应用层调用API进行初始化和反初始化
3、dll里所有会调用GDI+的函数中,都执行一次GdiplusStartup 和 GdiplusShutdown (这个方法应该没人会采用···)

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

附一段我常用的自动初始化GDI+的代码(注意头文件包含的顺序,否则有链接错误)
#include <Windows.h>  // must be inluded before gdiplus.h, otherwise compile error #include <gdiplus.h>#pragma comment(lib, "gdiplus.lib")class CAutoLoadGDIPlus{    ULONG_PTR m_GdiplusToken;public:    CAutoLoadGDIPlus()    {        Gdiplus::GdiplusStartupInput StartupInput;        GdiplusStartup(&m_GdiplusToken, &StartupInput, NULL);    }    ~CAutoLoadGDIPlus()    {        // 注意: 卸载前必须清理所有GDI+的对象 因为卸载后再清理会有异常         Gdiplus::GdiplusShutdown(m_GdiplusToken);     }}g_GdiplusInstance; 

1 0
原创粉丝点击