c++ 关闭程序时TOpenDialog出现异常

axr492tv  于 2022-11-19  发布在  其他
关注(0)|答案(3)|浏览(138)

当我使用TOpenDialog时,在关闭程序后,Vcl.Forms模块中出现异常。
我正在使用的程序:

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

异常:'0x008133a4处的访问冲突:读取地址0x000000c4'
突出显示的是行:如果不是FHandleCreated,则

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

72qzrwbm1#

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

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

打开这个对话框,什么都不做,按取消,然后关闭应用程序就足够了。之后我遇到了和Jacek一样的访问冲突。所以问题出在C++ Builder 10.4中
更新:问题不在C++ Builder 10.4本身。当应用程序使用自定义样式(主题)时会出现错误。我刚刚在我的应用程序中禁用了自定义样式,OpenDialog没有错误。

kuhbmx9i

kuhbmx9i2#

一种可能的解决方法是禁用常用对话框的样式:

TStyleManager::SystemHooks = TStyleManager::SystemHooks >> TStyleManager::TSystemHook::shDialogs;
epggiuax

epggiuax3#

另一种可能的解决方法是设置OldStyleDialog选项。该对话框看起来是旧式的,但其颜色与Widows主题兼容。

OpenDialog1->Options << ofOldStyleDialog;

相关问题