为啥控件的类名不好?不能创建新的 GDI 句柄?
Posted
技术标签:
【中文标题】为啥控件的类名不好?不能创建新的 GDI 句柄?【英文标题】:Why class name of control is bad? Can not create new GDI handles?为什么控件的类名不好?不能创建新的 GDI 句柄? 【发布时间】:2015-06-10 11:22:42 【问题描述】:我有一个由 Delphi 语言创建的程序。这在 Windows XP SP3 上运行。
多次打开和停止程序后(~600 到 700 次)(只打开和停止,不做任何事情)。我的程序会出错:
无法输入到系统的文本框。 无法点击某些按钮。当出现错误时,错误将一直存在,直到计算机重新启动。 (重启程序无法解决这个bug)
我查看了一些系统信息,结果如下:
正常情况下,总 GDI 句柄小于 GDI 句柄:(使用 GDIView 检测)
大小写正常:3513 个 GDI 句柄 发生错误时:3410控件的类名错误:(使用 spy++ 检测)
普通:文本框的类名是Tedit。
发生错误时:“Toolbar_Customize”或“”或任何值(此值是awlay 更改)==> 我认为因为那样,我无法将值输入到文本框。
有时,当出现此错误时,我无法启动另一个 Windows 程序。
请帮助我。 P/s:有不清楚的地方欢迎评论
【问题讨论】:
Delphi 的哪个版本?另外,当您说您的程序“不做任何事情”时,它究竟做了什么?可以显示出处吗? 我使用的是 Delphi 2007。我只启动和停止程序多时间。不要执行程序的其他功能。 【参考方案1】:这让我想起了以下问题(RM_GetObjectInstance 消息导致的资源泄漏): http://qc.embarcadero.com/wc/qcmain.aspx?d=90511
最后一条评论中有一个解决方法。
【讨论】:
仅供参考,该问题已在 XE3 中修复。以上是关于为啥控件的类名不好?不能创建新的 GDI 句柄?的主要内容,如果未能解决你的问题,请参考以下文章
在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。