很久以前,我发现由于使用了封装了 Windows 对话框的 Delphi 打开文件和/或保存文件对话框,我的代码中出现了访问冲突。我在几个论坛上问了一些问题,并被告知这可能是由于某些程序向 shell 系统添加挂钩的方式导致 DLL 被注入每个进程,其中一些可能会对程序造成严重破坏。作为记录,我使用的编程环境是运行在 32 位 Windows XP 上的 Delphi 6 Professional。
当时我通过不使用 Delphi 的 Dialog 组件而是直接调用 comdlg32.dll 来解决它。这很好地解决了这个问题。
今天我第一次使用内存映射文件,果然,访问冲突开始出现在代码的奇怪部分。我尝试了我的 comdlg32.dll 直接调用,但这次没有帮助。为了将问题隔离为测试,我创建了一个列表框,其中包含我在测试期间使用的完全相同的文件。这些是我从打开文件对话框中选择然后启动我的内存映射文件的完全相同的测试文件。我进行了设置,以便通过单击列表框中的文件,我将在内存映射文件测试中使用该文件,而不是调用 comdlg32.dll 对话框函数来选择测试文件。
再次,访问违规消失了。为了向您展示我在 1 到 3 次试验中遇到访问冲突到根本没有遇到访问冲突,这是多么戏剧性的修复。不幸的是,当我确实需要使用文件对话框时,它当然会在以后咬我。
有没有其他人也处理过这个问题并找到了真正的罪魁祸首?你们有没有找到我可以用来解决这个问题的解决方案,而不是像现在这样绕着它跳舞?
提前致谢。