从注册表中读取CByteArray

时间:2016-12-20 21:11:44

标签: mfc

出于某种原因,我认为我已经过度复杂了。

这是我的保存代码:

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;
    }
}

有效。但是我过度了吗?

1 个答案:

答案 0 :(得分:0)

想想我明白了:

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

这有帮助。见info