【发布时间】:2010-11-05 16:06:45
【问题描述】:
根据 MSDN 文档,函数 GetOpenFileName() 在使用 Windows 2000 和更高版本为 Unicode 编译时,使用选项 OFN_ALLOWMULTISELECT 没有字符限制。但是,在 Windows XP x64 SP2 上,我发现 32k ANSI 限制仍然有效,尽管使用了 Unicode。我在网上看到过其他关于这个问题的投诉,但没有解决方案。有谁知道一个简单的解决方法?
为了完整起见,我使用的是 Visual Studio 2010,并使用 C++ 进行编码。
【问题讨论】:
-
也许“无限制”的定义不同。 32K 正在进入“此缓冲区的大小无效”的长期区域。单个文件的 Ansi 限制为 MAX_PATH 或 260 个字符 iirc。
-
AFAIK,单个文件路径的 Unicode 和 ANSI 限制为 MAX_PATH(XP+ 上为 260)。但我不确定你在“这个缓冲区的大小无效”领域得到了什么。传递给 GetOpenFileName 的 OPENFILENAME 结构(参见 msdn.microsoft.com/en-us/library/ms646839%28VS.85%29.aspx)中的缓冲区大小是一个 DWORD(无符号长整数),因此限制应该远大于 32k。
-
奇怪的问题。当然有一个解决方法,使用 GetOpenFileNameW()。
-
奇怪的答案。 GetOpenFileNameW() 是使用 GetOpenFileName() 并为 Unicode 编译时调用的函数。所以这提出了同样的问题。
-
我的意思是 32K 足够大,它可能会超过缓冲区过于偏执的健全性检查限制。
标签: c++ windows visual-studio-2010 user-interface getopenfilename