通常,当您使用 CFileDialog 多次打开一个文件时,会保持当前目录。即,每次对话框在前一个对话框结束的目录中打开(如果它没有被取消)。即使您从不同的地方使用不同的 CFileDialog 实例,这也有效。
并且即使在程序重新启动后,之前的目录仍然保持不变。
但在我的应用程序中,这似乎不适用于 DLL:从主 .exe 程序调用的 CFileDialogs 有它们当前的目录,而来自 .dll 的 CFileDialogs 有另一个。它们不相互交互,但在其他方面表现“正常”。
所以我最终得到了两个不一致的当前目录,你必须再次从 DLL 导航到所需的位置。有时您忘记更改目录,从一个目录加载 .exe 中的一些数据,从另一个目录加载 .dll 中的一些其他数据,并得到奇怪的结果。
您知道从 .exe 和 .dll 打开 CFileDialog 时具有相同当前目录的方法吗?
澄清:我不希望对话框总是从同一个目录开始,我希望它们保留最后使用的目录,但在 .exe 和 .dll 中始终如一地这样做。
我的.exe是在VS2003中创建的,.dll是在VS2010中创建的。
(我最初的猜测是您需要在 DLL 的 CFileDialog 构造函数中提供主窗口句柄,但这没有帮助。我的下一个猜测是通过 GetCurrentDirectory() 手动获取当前目录并将其设置为起始位置对于dll的CFileDialog(然后将当前目录设置为它结束的位置)。但这看起来很丑陋,我不确定它是否适用于从WinXP到Win8的所有操作系统,因为根据MSDN,它们对CFileDialog的默认目录有不同的规则.)