【发布时间】:2021-10-05 07:21:00
【问题描述】:
我正在使用 C 语言编写代码,使用 Windows API。
我正在查看 GetTempPathA() 函数here,并在下面包含了该函数的语法。
DWORD GetTempPathA(
DWORD nBufferLength,
LPSTR lpBuffer
);
我可以看到路径将存储在 lpBuffer 中,但我不明白我如何知道将 DWORD nBufferLength 设置为的大小 - 我希望具有更多 Windows 开发经验的人会告诉我这是一个值ANSI 语言系统和另一个用于 Unicode 的语言系统,但我更愿意向 Stackoverflow 上的专业人士寻求指导?
我认为它需要设置为文件路径可能的最长值,因为用户可能以某种方式将默认位置更改为系统其他地方的更长路径,但我只是猜测。
这似乎只是一个 ANSI 函数,但是在我查看 MSDN 上的文档期间,我经常发现具有 ANSI 和 Unicode 函数(分别以 A 和 W 结尾)的函数。我确实理解它们之间的区别,但是如果我必须创建一个缓冲区,那么最大输入大小是多少?
最后,在回答时请记住,我确实喜欢编写向后兼容的应用程序,因为我的许多朋友生活在第三世界国家,无法使用最新的 Windows 操作系统。
【问题讨论】:
-
为什么你使用这个函数的ANSI版本而不是Unicode版本?
-
@DavidHeffernan 在 MSDN 上,它似乎只有一个 ANSI 版本,我想要向后兼容。此 ANSI 版本适用于较旧的操作系统,但会以资源为代价在较新的操作系统上将 ANSI 转换为 Unicode。
-
您没有在 Windows 98 上运行您的代码。再次查看文档,当然有 Unicode 版本。而且 Windows 是使用 Unicode 实现的,因此当您调用 ANSI 函数时,转换成本更高。不要使用 ANSI 版本。使用 Unicode。
-
@questioner Google 通常在搜索函数名称时显示 ANSI 版本。如果函数名后面有一个 A,那么总是有一个 UNICODE 版本
-
@DavidHeffernan 我这样做是为了好玩。我已经在 Windows 98 上运行了用 Visual Studio 2010 编译的 hello world 程序。诀窍是链接到 msvcrt.dll 而不是 msvcr100.dll。
标签: c windows winapi unicode ansi