【发布时间】:2014-07-16 03:35:01
【问题描述】:
我在 Win XP 平台上用 VS 6.0 开发了一个相当大的 C++ 程序,现在已经迁移到运行 Win 7 的新机器上(仍在运行 VS 6.0)。该代码包含一个函数,用于实例化和运行 CFileDialog 对象以从特定初始目录中查找并打开具有特定扩展名的 ASCII 文件。但是现在,程序挂了就行了
if (t1.DoModal()==IDOK)
...其中 t1 是 CFileDialog 实例。 为了调查标准 CfileDialog 类停止工作的原因,我在 VS 6.0 中创建了一个单独的测试项目,其中包含一个带有一个按钮的简单对话框,其中包含以下代码:
void CFileDialogTestDlg::OnOpenFileDialogButton()
{
CFileDialog t1(true);
if(t1.DoModal()==IDOK)
{
CString s3=t1.GetPathName();
MessageBox(s3);
}
}
此测试运行良好,并显示一个可用的文件对话框。我还可以通过修改 t1 的 m_ofn 成员在我的大型项目中复制我想要的初始目录等。
但是将此代码放入我的大型项目(即修改其中的相关按钮)仍然挂在DoModal() 行。试图追踪到标准的 MS 课程似乎是徒劳的,在合理的时间范围内无法理解其内部结构。
当我为我的测试项目增加堆栈空间以匹配我的大型项目 (400MB) 时,我重现了与大型项目相同的挂起行为。
谁能解释为什么增加堆栈空间会以这种方式影响文件对话框的执行,有没有办法解决这个问题,记住我需要大的堆栈空间来避免完全重写我的项目?
【问题讨论】:
-
你的真实项目使用线程吗?
-
是的,调试多线程 DLL(项目设置)
标签: visual-c++