当我使用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;
3条答案
按热度按时间72qzrwbm1#
我确认这个问题。我有一个使用TOpenDialog组件的项目。RAD C++ Builder 10.2(东京)没有问题。但是现在我升级到RAD C++ Builder 10.4 Update 2(悉尼)后得到同样的错误。我没有使用auto_ptr动态创建TOpenDialog。相反,我只是在我的窗体上拖动组件。所以代码非常简单:
打开这个对话框,什么都不做,按取消,然后关闭应用程序就足够了。之后我遇到了和Jacek一样的访问冲突。所以问题出在C++ Builder 10.4中
更新:问题不在C++ Builder 10.4本身。当应用程序使用自定义样式(主题)时会出现错误。我刚刚在我的应用程序中禁用了自定义样式,OpenDialog没有错误。
kuhbmx9i2#
一种可能的解决方法是禁用常用对话框的样式:
epggiuax3#
另一种可能的解决方法是设置OldStyleDialog选项。该对话框看起来是旧式的,但其颜色与Widows主题兼容。