关闭程序时TOpenDialog出现异常



当我使用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;

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

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

打开这个对话框,什么也不做,按取消,然后关闭应用程序就足够了。在那之后,我遇到了和Jacek一样的访问违规。所以问题出在C++Builder 10.4 中

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

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

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

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

OpenDialog1->Options << ofOldStyleDialog;

最新更新