2013-10-24 390 views
0

我正在使用AMD ADL來枚舉和操作連接到我係統的顯示器。我需要的一個必要功能是能夠讀取和解析顯示EDID。我能夠解析EDID的字節數組表示,但是我無法獲取EDID。基於ADL文檔,我定義了ADLDisplayEDIDData結構並導入了ADL_Display_EdidData_Get函數。但是,任何執行我的代碼都會導致retvalue -3的錯誤。此retvalue指示無效的參數。使用AMD ADL獲取C#中的顯示器EDID

的EDIDData結構:

[StructLayout(LayoutKind.Sequential)] 
internal struct ADLDisplayEDIDData 
{ 
    internal int Size; 
    internal int Flag; 
    internal int EDIDSize; 
    internal int BlockIndex; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] 
    internal byte[] EDIDData; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] 
    internal int[] Reserved; 
} 

的dllimport的:

[DllImport(Atiadlxx_FileName)] 
internal static extern int ADL_Display_EdidData_Get(int adapterIndex, int displayIndex, ref ADLDisplayEDIDData EDIDData); 

是否與我的聲明的任何錯誤?有沒有人有ADL的經驗和獲得EDID信息?

預先感謝您。

回答

0

嘗試這種情況:

[DllImport(Atiadlxx_FileName)] 
internal static extern int ADL_Display_EdidData_Get(int adapterIndex, int displayIndex, [In, Out] ADLDisplayEDIDData[] EDIDData); 

ADLDisplayEDIDData[] EDID = new ADLDisplayEDIDData[2]; 
NVGetMonitorEDIDs(0, EDID); 

這將是很好的尺寸長度傳遞到C++這樣的:

[DllImport(Atiadlxx_FileName)] 
internal static extern int ADL_Display_EdidData_Get(int adapterIndex, int displayIndex, [In, Out] ADLDisplayEDIDData[] EDIDData, int iLength); 

ADLDisplayEDIDData[] EDID = new ADLDisplayEDIDData[2]; 
NVGetMonitorEDIDs(0, EDID, EDID.Length);