2015-11-19 178 views
0

我使用theApp.GetSectionString(lpszSubSection, lpszEntry, lpszDefault)來從註冊表中讀取值。BUG:theApp.GetSectionString()不返回默認值

問題是如果註冊表中缺少目標條目,它不會返回默認值。

CString str = GetSectionString(_T("Settings"),_T("Gugus"),_T("default 123"));

我也總是檢查str,如果它是一個空字符串,然後手動將其設置爲默認值的str

這是一個錯誤或默認行爲GetSectionString()

CString str = theApp.GetSectionString (_T("Xenax"),_T("MechanicalLimit X-,X+,-Y-,Y+"), "-20999, 4799, 2699, -9999"); 
    if (str.empty()) // <- Needed, :(( 
    { 
     str = "-20999, 4799, 2699, -9999" ; 
    } 
+1

「CWinAppEx :: GetSectionString()」中存在一個錯誤。這個bug在VS 2012中修復 –

+0

是的,我正在使用VS2010。 VS2010中有這個問題的解決方法嗎? –

+0

您必須更新到VS 2012或更高版本的VS或使用該解決方法。 –

回答

0

我假設你的代碼應該閱讀(IsEmpty()應該用來代替empty()):

CString str = theApp.GetSectionString (_T("Xenax"),_T("MechanicalLimit X-,X+,-Y-,Y+"), _T("-20999, 4799, 2699, -9999")); 
if (str.IsEmpty()) // <- Needed, :(( 
{ 
    str = _T("-20999, 4799, 2699, -9999"); 
} 

有在CWinAppEx::GetSectionString()的錯誤。此錯誤已在VS 2012中修復。更多信息在:http://blogs.msdn.com/b/vcblog/archive/2012/06/14/10320171.aspx

+0

是的,我看到 BOOL CSettingsStore ::閱讀(LPCTSTR lpszValueName,CString的strValue的)問題 我不知道,如果這是一個錯誤或默認行爲,因爲同樣的問題theApp.GetString(..) –