AnsweredAssumed Answered

ADL SDK - having trouble with ADL_Overdrive5_ODParameters_Get in C#

Question asked by xandrios on Jul 27, 2012

Hello,

 

I'm trying to program a tool using the ADL SDK. I've ran into an issue too hard for me to crack. (ADL_Overdrive5_ODParameters_Get function)

 

The code:

/// <summary> ADLODPerformanceLevel Structure</summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ADLODPerformanceLevel
{
    /// <summary> Engine clock </summary>
    internal int iEngineClock;
    /// <summary> Memory clock </summary>
    internal int iMemoryClock;
    /// <summary> Core voltage </summary>
    internal int iVddc;
}
/// <summary> ADLODPerformanceLevels Structure</summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ADLODPerformanceLevels
{
    /// <summary> Must be set to sizeof( ADLODPerformanceLevels ) + sizeof( ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1) </summary>
    internal int iSize;
    /// <summary> Reserved for future use </summary>
    internal int iReserved;
    /// <summary> Engine clock range</summary>
    internal ADLODPerformanceLevel[] aLevels;
  
}

 

ADLODParameters adlod = new ADLODParameters();

ADL.ADL_Overdrive5_ODParameters_Get(0, ref adlod);

ADLODPerformanceLevels performancelevels = new ADLODPerformanceLevels();

performancelevels.aLevels = new ADLODPerformanceLevel[adlod.iNumberOfPerformanceLevels];

ADLODPerformanceLevel tmp = new ADLODPerformanceLevel();

//iSize must be set to sizeof( ADLODPerformanceLevels ) + sizeof( ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1)

performancelevels.iSize = Marshal.SizeOf(performancelevels) + Marshal.SizeOf(tmp) * (adlod.iNumberOfPerformanceLevels - 1);

ADLODPerformanceLevels defaultPerformancelevels = new ADLODPerformanceLevels();

if (null != ADL.ADL_Overdrive5_ODPerformanceLevels_Get)

    ADLRet = ADL.ADL_Overdrive5_ODPerformanceLevels_Get(0, 0, ref performancelevels);

 

 

All code seems to work up until the last line. It looks like the performancelevels variable still isn't in a state it's supposed to be? (at least I think that's what the issue is)

Bug says: ArgumentException was unhandled (exception of HRESULT: 0x80070057 (E_INVALIDARG))

 

Any help would be appreciated. Thanks (If you need more info, just ask)

Outcomes