ActiveX中使用GDI+的有关问题

ActiveX中使用GDI+的问题
我在OCX中使用到了GDI+, 是在COleControl 的派生类 CMultiwndCtrl 中构造和析构的,但是我的OCX中,有一个对话框类,也使用到了GDI+对象(new 了一些对象), 这样在退出程序的时候就有问题了。

因为CMultiwndCtrl 在对话框类前构造,所以先析构,析构的时候就调用过来 Gdiplus::GdiplusShutdown(m_gdiplusToken);这样在对话框类的析构函数中,就无法 delete 这些对象了。
不知道大家在ocx中如何使用GDI+的? 求助

我自己在CMultiwndCtrl 中写了个清理函数,在释放GDI+前先清理GDI+对象可以吗?

------解决方案--------------------
这样的话,还是在你的析构函数中先进行资源的释放吧
------解决方案--------------------
在进行GDI+初始化和释放的时候进行判断,看是否已经初始化,或已经释放。

程序本身需要调用,OCX也需要判断。

我之前的项目遇到类似的问题,由于OCX释放了,然后一些类的析构函数还调用了GDI+的函数,导致程序死机。如果出现这样的情况,那么就把初始化和释放GDI+的任务交给调用程序吧,OCX不进行初始化和释放。
------解决方案--------------------
建议你去掉初始化和释放的代码,然后在任意一个CPP文件中加入下述代码:

CImage __dont_use__;

构造一个全局对象即可。