出于某种原因,我认为我已经过度复杂了。
这是我的保存代码:
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 :(得分:0)
想想我明白了:
rbyAryAutoAssignStates.SetSize(uSize);
memcpy(rbyAryAutoAssignStates.GetData(), ppData, uSize);
这有帮助。见info