為了減少程序中的硬編碼,靈活按需管理字符串空間,使用了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對象的內(nèi)部緩沖區(qū),但違背了面向?qū)ο笤O(shè)計的原則(由公開方法修改內(nèi)部數(shù)據(jù)),因此不保證對象的完整性,在操作完成后一定要調(diào)用ReleaseBuffer
posted on 2019-07-31 12:51
春秋十二月 閱讀(7973)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++