Delphi应用程序突然报告无效的ImageList

Delphi应用程序突然报告无效的ImageList,delphi,Delphi,我有一个已经运行了10多年的应用程序。它是用Delphi 6编写的 上周,一位客户报告在读取特定Imagelist时出现应用程序错误 虽然我可以理解在开发过程中出现的错误,但我不理解为什么在应该编译ImageList的应用程序中会突然出现这样的错误。尤其是一个多年没碰过的 windows/语言环境中的任何内容是否会影响对编译到EXE中的图像列表的读取?客户正在使用韩国windows。还是有其他地方可以寻找原因 应该注意的是,客户机对此应用程序没有任何开发环境,除了最终用户之外,不太可能是其他任何

我有一个已经运行了10多年的应用程序。它是用Delphi 6编写的

上周,一位客户报告在读取特定Imagelist时出现应用程序错误

虽然我可以理解在开发过程中出现的错误,但我不理解为什么在应该编译ImageList的应用程序中会突然出现这样的错误。尤其是一个多年没碰过的

windows/语言环境中的任何内容是否会影响对编译到EXE中的图像列表的读取?客户正在使用韩国windows。还是有其他地方可以寻找原因

应该注意的是,客户机对此应用程序没有任何开发环境,除了最终用户之外,不太可能是其他任何人


(注意:出于安全原因,我不得不模糊图像中的一些细节,我希望这不会影响一般问题)

我怀疑这只是一个后续问题:您的代码可以访问任何
。位图
,并且由于指针不正确,会覆盖
TImageList
的部分。询问客户是否可以重现此错误,然后尝试自己重现


根据德尔福5号资料来源(6号或7号资料中没有),这种情况发生在:

procedure TCustomImageList.CreateImageList;
...
begin
  FHandle := ImageList_Create(...);
  if FHandle = 0 then raise EInvalidOperation.Create(SInvalidImageList);

…这也是唯一使用
SInvalidImageList
的地方。可能会失败,但没有机会找出原因。一个可能的原因是COMCTL32.DLL确实是一个“错误”的版本,您的客户现在有一个行为不同的版本,而多年前它是另一个版本(现在没有人知道是哪个版本)。

提示:尝试Alt+PrntScr创建屏幕截图。@AndreasRejbrand当然,但不幸的是,我只有客户提供了这个版本。我无法在这里复制这个问题。在我写了评论之后,我意识到可能是这样,对不起!好吧,至少这是一个很好的莫尔模式D6图像列表中有各种各样奇怪的东西。像图形驱动程序这样的东西起了作用。这里真正需要深入挖掘的是当出现此错误时,有关程序状态的详细报告。像madExcept和EurekaLog这样的工具会给你这个。这更多的是一个注释而不是一个答案…我也更喜欢一个注释,但它太长,需要太多的格式才能成为注释。看到这个代码:内存问题可能吗?(或任何相关内容:太多资源/句柄/…)您可以尝试获取正在加载的
comctl32.dll
的版本信息。然后将其与另一个系统版本进行比较。。。