我试图遵循的 MSDN 文档位于此处。基本上,我试图在 C# 中弄清楚如何将该指针读入 DHCP_OPTION_DATA 结构列表。
我有以下代码,但我认为这不是正确的方法。
DHCP_OPTION_ARRAY optionArray = (DHCP_OPTION_ARRAY)Marshal.PtrToStructure(options, typeof(DHCP_OPTION_ARRAY));
List<DHCP_OPTION> allOptions = new List<DHCP_OPTION>();
for (int i = 0; i < optionArray.NumElements; i++) {
DHCP_OPTION option = (DHCP_OPTION)Marshal.PtrToStructure(optionArray.Options, typeof(DHCP_OPTION));
allOptions.Add(option);
optionArray.Options = (IntPtr)((int)optionArray.Options + (int)Marshal.SizeOf(option));
}
由于我无法将指针编组到通用列表集合中,因此我尝试了这种方式。我的问题是,根据我将 IntPtr 增加到多少,我得到了不正确的结果。最初我是这样做的。
optionArray.Options = (IntPtr)((int)optionArray.Options + (int)Marshal.SizeOf(typeof(DHCP_OPTION_DATA)));
但是,我随后意识到下一个元素将位于实际选项的大小之后。
所以问题仍然存在,我如何将 Ptr 编组到结构列表中?
编辑 1
我发布了错误的文章,现在已修复。
编辑 2
虽然这两个答案都很好,但我选择了我的问题的答案,因为它解决了我对在封送信息的后端如何处理数据缺乏了解的问题。