first you need to determine the Adapter Index (AapterInfo.iAdapterIndex) and the DisplayLogicalIndex (ADLDisplayInfo.displayID.iDisplayLogicalIndex) that belong to the display. You can do this by enumerating the mapped displays. The best is to first retrieve the current mode and just to update the parameters you want to change. Than you can use the Display_Modes_Set as follow:
nModes = 0;
ADLMode* pMode = NULL;
// Get current disply mode information
nADLErrCode = ADL_Display_Modes_Get(iAdapterIndex, DspLogicalIdx, &nModes, &pMode);
if (nADLErrCode == ADL_OK)
pMode.iXRes = nHres;
pMode.iYRes = nVres;
pMode.fRefreshRate = (float)Freq;
// set new mode
nADLErrCode = ADL_Display_Modes_Set(iAdapterIndex, DspLogicalIdx, nModes, pMode);
Depending on the parameters you enter for the mode there might still be errors if the mode cannot be applied. E.g. applying a dual link resolution to a display that is connected through single link DVI. But in this case you should get an ADL_ERR an no ADL_ERR_INVALID_PARAM.
Thanks, thats got it working now.
Previously I was using an ADLMode from ADL_Display_PossibleModes_Get().