【问题标题】:GDI resource leak in DrawFrameControlDrawFrameControl 中的 GDI 资源泄漏
【发布时间】:2010-09-16 05:58:46
【问题描述】:

似乎 DrawFrameControl() 创建了 Font 和 Brush 对象,将它们选择到 dc 中,并且没有删除它们。 (根据 BoundsChecker 消息)。有人遇到过这种情况吗?

【问题讨论】:

    标签: winapi gdi bounds-checker


    【解决方案1】:

    我在各种 OS/CRT Dll 中都经历过同样的事情。 其中一种模式是

    • 我获得了窗口的 DC(GetDC 或 GetWindowDC),以便执行我喜欢的任何操作(即创建兼容的内存 DC)。
    • 我在完成 DC 后释放它,即使我没有在其中选择任何 GDI 对象,有时我也会收到 Boundschecher 警告,指出设备上下文中仍有选定的对象。

    由于这些警告绝对不在我的代码中,因此我建议对它们持保留态度。 通常我所做的是清除所有引用我的代码的 BC 警告。

    题外话:BC 会抛出许多开发人员无法在其代码中修复的警告。在 stl 中,您将收到无数警告,但其中大多数是“比较不相关的指针”。这并不意味着 BC 错误地扔了它们。在常规应用程序中“比较不相关的指针”可能是一场灾难,但我认为编写 stl 实现的人知道他们在做什么,并且可能已经检查过这些案例。

    【讨论】:

    • 不幸的是,在我的情况下肯定存在泄漏,因为 GDI 对象的数量在几秒钟内增加到数千,然后 GDI 崩溃。
    猜你喜欢
    • 2014-02-10
    • 2019-06-15
    • 2011-12-23
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多