首页 > 解决方案 > 关闭程序时 TOpenDialog 中的异常

问题描述

我使用TOpenDialog的时候,关闭程序后,模块出现异常Vcl.Forms

我正在使用的程序:

std::auto_ptr<TOpenDialog> OpenDialog (new TOpenDialog(this));
if ( OpenDialog->Execute() ){}

例外:'在 0x008133a4 的访问冲突:读取地址 0x000000c4'

突出显示的是 line: if not FHandleCreated then

function TApplication.GetDialogHandle: HWND;
begin
  if not FHandleCreated then
    Result := SendMessage(Handle, CM_DIALOGHANDLE, 1, 0)
  else
    Result := FDialogHandle;
end;

标签: c++c++buildervcltopendialog

解决方案


我确认这个问题。我有使用 TOpenDialog 组件的项目。RAD C++ Builder 10.2(东京)没有问题。但是现在我在升级到 RAD C++ Builder 10.4 Update 2 (Sydney) 后遇到了同样的错误。我不使用带有 auto_ptr 的动态创建 TOpenDialog。相反,我只是在表单上拖动组件。所以代码很简单:

if(!OpenDialog1->Execute())
     return;

打开这个对话框就足够了,什么都不做,按取消然后关闭应用程序。在那之后,我遇到了与 Jacek 相同的访问冲突。所以问题出在 C++ Builder 10.4

更新:问题不在于 C++ Builder 10.4 本身。当应用程序使用自定义样式(主题)时会出现错误。我刚刚在我的应用程序中禁用了自定义样式,并且 OpenDialog 没有错误。


推荐阅读