DWORD中TCHAR数组的大小

时间:2014-05-09 15:32:28

标签: visual-c++ tchar dword

我有以下VC ++代码。如何在DWORD中编写TCHAR的大小,这在运行时不会失败。

HKEY hKey = 0;

DWORD dwType = REG_SZ;

TCHAR buf[255] = {0};

DWORD dwBufSize = sizeof(buf);


if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS ) 
{
    auto ret = RegQueryValueEx( hKey, TEXT("\\Device\\Serial0"), 0, &dwType, (LPBYTE)buf, &dwBufSize );
    ...
}

那么bufSize应该有什么价值。以下代码是否仍然正确?

DWORD bufSize = sizeof(buf);

1 个答案:

答案 0 :(得分:0)

bufSize的值为510字节。 你应该明白TCHAR是WCHAR的typedef,即2bytes。每当我们使用sizeof运算符时,它将以字节为单位给出大小。

注意:如果定义了UNICODE_STRING,那么TCHAR将被视为8个字节,否则其16个字节将保持宽字符。

这里的问题可以通过两次调用 RegQueryValueEx API来解决。提到的API的最后一个参数是[_in_out]确实意味着将其作为null传递并首先检索大小。然后在下一次调用API时,传递大小并检索lpdata。 ((如果lpData参数指定的缓冲区不足以容纳数据,则该函数返回ERROR_MORE_DATA并将所需的缓冲区大小存储在lpcbData指向的变量中))