非托管资源创建与释放

来源:互联网 发布:wind数据库 华东师大 编辑:程序博客网 时间:2024/06/04 18:58
现象:
        主程序调用我的DLL库无法运行;异常信息显示
BUG:
        Exception:参数无效。
        System.ArgumentException
        Stack Trace:
        在 System.Drawing.Graphics.CheckErrorStatus(Int32 status)
        在 System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)

        在 Nova.Rss.RssToImage.RssItemAsSingleLine(RssItemInfo item, Int32 wndHeight, Bitmap& bmp)

        在 Nova.Rss.RssToImage.RssToSingleLineImage(RssInfo rssInfo, Int32 wndHeight, Color backColor, List`1& imgList)
解决过程:
        最后将问题锁定到了其中的参数Font font上,替换从上层传入的font为固定的font;异常信息出现在了其他的含有font参数的函数中。
推断,主程序所赋值的最外层接口的Font有问题,该font为接口所在类的一个成员变量。查看外层代码后发现,外层的所传入到类成员变量的font,来自于一个公共的参数库。所以外层传入的这个font并没有问题。
        我的dll库这个类含有一个Dispose方法,而这个方法中有一个语句执行的是对成员变量_font的注销操作,问题就出在这里。
        外层调用了我的Dispose方法后,导致了外层所用的font的释放。
结论:
        释放资源应该遵循谁创建谁释放原则。
0 0
原创粉丝点击