Devolución de llamada de EnumDisplayMonitors

Estoy tratando de usar los EnumDisplayMonitors para crear una matriz dinámica de cada monitor y almacenar la estructura DISPLAY_DEVICE. ¿Por qué el código siguiente no es correcto?

BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {

    MONITORINFOEX iMonitor;
    iMonitor.cbSize = sizeof(MONITORINFOEX);
    GetMonitorInfo(hMonitor, &iMonitor);

    if (iMonitor.dwFlags == DISPLAY_DEVICE_MIRRORING_DRIVER)
    {
        return true;
    }
    else
    {
        *reinterpret_cast<ScreenArray*>(dwData) = ScreenArray(&iMonitor);
        return true;
    };

}

Llamado usando

ScreenArray monitorArray[15];

int i = 0;
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, reinterpret_cast<LPARAM>(&monitorArray[i++]));

El primero en la matriz (monitorArray [0]) devuelve información correcta para el segundo monitor, pero monitorArray [1] tiene valores máximos.

EDITAR: Resuelto El método que utilicé fue simplemente implementar una función que creé:

MonitorArray *mA = reinterpret_cast<MonitorArray*>(dwData);
        mA->addScreen(&iMonitor);

Respuestas a la pregunta(2)

Su respuesta a la pregunta