GetUserNameEx()返回的缓冲区的大小

时间:2012-02-13 12:01:01

标签: c++ visual-studio winapi unicode

调用GetUserNameEx()时,我有一个关于奇怪的返回大小的问题。也许有人已经遇到过这个问题。

我两次调用GetUserNameEx():首先获取所需的缓冲区大小,然后实际填充缓冲区。

documentation中,您可以阅读有关尺寸参数的信息:

  1.   

    如果lpNameBuffer太小,则函数失败,GetLastError返回ERROR_MORE_DATA。此参数接收所需的缓冲区大小,以Unicode字符(无论是否使用Unicode),包括终止空字符。

    我保存此值(required_size)以检查成功返回的值。

  2.   

    在输入时,此变量在TCHAR中指定lpNameBuffer缓冲区的大小。如果函数成功,则变量接收复制到缓冲区的TCHAR数,不包括终止空字符。

    这一个是returned_size

  3. 奇怪的是,如果我将项目属性中的字符编码设置为未设置,则required_size为22,returned_size为11。

    当我将Charachter编码设置为使用Unicode字符集时,required_size为11,returned_size也为11。

    也许我没有得到什么,但我希望required_size不要改变。有人见过这个吗?

    谢谢。

    UPD:这里是code example

1 个答案:

答案 0 :(得分:4)

我责备。嗯,这是一个错误。它永远不会出错,因为它要求的缓冲区大小是所需大小的两倍。您将获得在第二次调用时复制到缓冲区的实际字符数,以便您知道字符串的实际大小。我不会尝试修复它,在将字符串从Unicode转换为mbcs之前实际使用缓冲区的可能性很小。虽然我没有看到它的证据。