使用CString GetBuffer自适应获取计算机名称

使用CString GetBuffer自适应获取计算机名称
   为了减少程序中的硬编码,灵活按需管理字符串空间,使用了ATL中的CString类,代码如下
 1         CString bstrComPathName;
 2         WCHAR componentPathName[1];
 3         DWORD dwNameLen = 1;    
 4 
 5          if (!GetComputerNameEx( ComputerNamePhysicalDnsFullyQualified, componentPathName, &dwNameLen))
 6         { 
 7             DWORD dwErr = GetLastError();
 8              if( ERROR_MORE_DATA==dwErr)
 9             {            
10                  if (!GetComputerNameEx(ComputerNamePhysicalDnsFullyQualified, bstrComPathName. GetBuffer(dwNameLen), &dwNameLen))
11                 { 
12                     zlog_error(g_zc, "GetComputerNameEx with ComputerNamePhysicalDnsFullyQualified fail: %d", GetLastError());
13                      return -1;
14                 }
15             }
16              else
17             {
18                 zlog_error(g_zc, "GetComputerNameEx with ComputerNamePhysicalDnsFullyQualified for fail: %d", dwErr);
19                  return -1;
20             }
21         }                
22         bstrComPathName. ReleaseBuffer(); 
    需要注意的是,GetBuffer方法虽提供方便了直接修改CString对象的内部缓冲区,但违背了面向对象设计的原则(由公开方法修改内部数据),因此不保证对象的完整性,在操作完成后一定要调用ReleaseBuffer

你可能感兴趣的:(使用CString GetBuffer自适应获取计算机名称)