gpt4 book ai didi

c++ - CFileDialog 的当前目录在.exe 和.dll 中不一致

转载 作者:行者123 更新时间:2023-11-30 02:55:31 25 4
gpt4 key购买 nike

通常,当您使用 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 的所有操作系统,因为它们对 CFileDialog 的默认目录有不同的规则根据 MSDN。)

最佳答案

您必须使用下面给出的 CFileDialog:

CFileDialog FileDlg( TRUE, NULL, NULL, OFN_NOCHANGEDIR, _T( "All Files (*.*)|*.*||" ));

标志 OFN_NOCHANGEDIR 表示在打开文件对话框中保留以前的路径。过滤器只是一个例子。您必须使用自己的文件扩展名过滤器。

如果您必须在 exe 和 dll 中获得相同的位置,请在两者中使用相同的文件对话框对象。

关于c++ - CFileDialog 的当前目录在.exe 和.dll 中不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com