GetUserNameEx()返回的缓冲区的大小
问题描述:
我在调用GetUserNameEx()时遇到了有关奇怪返回大小的问题。也许有人已经遇到了这个问题。GetUserNameEx()返回的缓冲区的大小
我调用GetUserNameEx()两次:第一次获取所需的缓冲区大小,第二次实际填充缓冲区。
在documentation你可以看到这篇关于大小参数:
-
如果lpNameBuffer太小,函数失败并GetLastError返回ERROR_MORE_DATA。该参数以Unicode字符(不论是否使用Unicode)(包括终止空字符)接收所需的缓冲区大小。
我保存此值(
required_size
)以检查成功返回的值。 -
在输入时,该变量指定TCHAR中的lpNameBuffer缓冲区的大小。如果函数成功,变量接收复制到缓冲区的TCHAR数量,不包括终止空字符。
这一个是
returned_size
。
奇怪的是,如果我在项目属性中设置字符编码未设置,则required_size
是22和returned_size
是11
而当我设Charachter编码使用Unicode字符集,然后required_size
是11,returned_size
也是11。
也许我没有得到什么,但我预计required_size
不能改变。有没有人看到过这个?
谢谢。
UPD:这里是code example。
答
我重播。那么,这是一个错误。它永远不会出错,因为它要求的缓冲区是所需大小的两倍。您将在第二次调用时获得实际复制到缓冲区的字符数,以便知道字符串的实际大小。我不会尝试修复它,但在将字符串从Unicode转换为mbcs之前,实际使用缓冲区的可能性很小。虽然我没有看到它的证据。
发布您的代码。会更容易看到问题。 – Dennis 2012-02-13 12:34:56
通过指向代码的链接更新了帖子。 – kishkin 2012-02-13 14:32:59