2016-12-20 4 views
0

По какой-то причине я думаю, что мне это сложно.Чтение CByteArray из реестра

Это моя экономия код:

theApp.WriteProfileBinary(theApp.GetActiveScheduleSection(_T("Options")), _T("AssignStates"), 
    rAryByAssignStates.GetData(), sizeof(BYTE) * (UINT)iNumColumns); 

Короткий и сладкий.

Это мое чтение код:

void COptionsDlg::ReadAssignStatesInfoEx(CByteArray& rbyAryAutoAssignStates) 
{ 
    UINT uSize; 
    LPBYTE ppData = NULL; 
    BYTE *pbyAssignStates = NULL; 

    theApp.GetProfileBinary(theApp.GetActiveScheduleSection(_T("Options")), _T("AssignStates"), &ppData, &uSize); 
    if (uSize > 0) 
    { 
     // In theory it should be safe to use this data 
     pbyAssignStates = new BYTE[uSize]; 
     memcpy(pbyAssignStates, ppData, uSize); 

     rbyAryAutoAssignStates.SetSize(uSize); 
     for (UINT i = 0; i < uSize; i++) 
      rbyAryAutoAssignStates[i] = pbyAssignStates[i]; 

     delete[] pbyAssignStates; 
     pbyAssignStates = NULL; 
    } 
    else 
    { 
     // It seems like the user has not yet displayed the Options window 
     RebuildAssignStatesInfoEx(rbyAryAutoAssignStates, true); 
    } 

    // Tidy memory 
    if (uSize != 0) 
    { 
     delete[] ppData; 
     ppData = NULL; 
    } 
} 

Он работает. Но я переусердствовал это?

ответ

0

Думаю, что я получил его:

rbyAryAutoAssignStates.SetSize(uSize); 
memcpy(rbyAryAutoAssignStates.GetData(), ppData, uSize); 

Это помогло. См. info

Смежные вопросы