Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AMD ADL在C中获取监视器EDID#_C#_Amd Processor_Edid - Fatal编程技术网

C# 使用AMD ADL在C中获取监视器EDID#

C# 使用AMD ADL在C中获取监视器EDID#,c#,amd-processor,edid,C#,Amd Processor,Edid,我正在使用AMD ADL枚举和操作连接到我的系统的显示器。我需要的必要功能之一是能够读取和解析显示EDID。我能够解析EDID的字节数组表示,但无法获取EDID。根据ADL文档,我定义了ADLDisplaydidData结构并导入了ADL_Display_EdidData_Get函数。但是,我的代码的任何执行都会导致retvalue-3错误。此值表示无效参数 eDDATA结构: [StructLayout(LayoutKind.Sequential)] internal struct ADLDi

我正在使用AMD ADL枚举和操作连接到我的系统的显示器。我需要的必要功能之一是能够读取和解析显示EDID。我能够解析EDID的字节数组表示,但无法获取EDID。根据ADL文档,我定义了ADLDisplaydidData结构并导入了ADL_Display_EdidData_Get函数。但是,我的代码的任何执行都会导致retvalue-3错误。此值表示无效参数

eDDATA结构:

[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(Atiadlxx_FileName)]
internal static extern int ADL_Display_EdidData_Get(int adapterIndex, int displayIndex, ref ADLDisplayEDIDData EDIDData);
我的声明有错误吗?是否有人具有ADL和获取EDID信息的经验

提前谢谢。

试试这个:

[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);