BOOL CRegistry::Read (LPCTSTR pszKey, CStringArray& scArray) { ASSERT(m_hKey); const int iMaxChars = 4096; int OldSize = (int) scArray.GetSize(); DWORD dwType; DWORD dwData = iMaxChars; BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR)); ASSERT(byData); LONG lReturn = RegQueryValueEx(m_hKey, pszKey, NULL, &dwType, byData, &dwData); m_Info.lMessage = lReturn; m_Info.dwType = dwType; m_Info.dwSize = dwData; if(lReturn == ERROR_SUCCESS && dwType == REG_BINARY) { ASSERT(dwData < iMaxChars); CMemFile file(byData, dwData); CArchive ar(&file, CArchive::load); ar.m_bForceFlat = FALSE; ASSERT(ar.IsLoading()); ASSERT(scArray.IsSerializable()); scArray.RemoveAll(); scArray.SetSize(10); scArray.Serialize(ar); scArray.SetSize(OldSize); ar.Close(); file.Close(); } if(byData) { free(byData); byData = NULL; } if(lReturn == ERROR_SUCCESS) return TRUE; return FALSE; }
BOOL CRegistry::Write (LPCTSTR pszKey, CStringArray& scArray) { if (m_bReadOnly) { ASSERT (FALSE); return FALSE; } ASSERT(m_hKey); const int iMaxChars = 4096; BYTE* byData = (BYTE*)::calloc(iMaxChars, sizeof(TCHAR)); ASSERT(byData); CMemFile file(byData, iMaxChars, 16); CArchive ar(&file, CArchive::store); ASSERT(scArray.IsSerializable()); scArray.Serialize(ar); ar.Close(); const DWORD dwLen = (DWORD) file.GetLength(); ASSERT(dwLen < iMaxChars); LONG lReturn = RegSetValueEx(m_hKey, pszKey, 0, REG_BINARY, file.Detach(), dwLen); m_Info.lMessage = lReturn; m_Info.dwSize = dwLen; m_Info.dwType = REG_BINARY; if(byData) { free(byData); byData = NULL; } if(lReturn == ERROR_SUCCESS) return TRUE; return FALSE; }
void CSdtMfcAppView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CFile * pfile = new CFile(TEXT("test.txt"),CFile::modeReadWrite | CFile::modeCreate); ASSERT(pfile); CArchive ar(pfile,CArchive::store); CString str = TEXT("ABCDEFG"); CStringArray arrStr; arrStr.Add(str); //ar<<arrStr; BOOL flag = arrStr.IsSerializable(); if (ar.IsStoring()) { // TODO: 在此添加存储代码 arrStr.Serialize(ar); } else { // TODO: 在此添加加载代码 } CView::OnLButtonDown(nFlags, point); }