私がフォローしようとしている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
どちらの回答も素晴らしいものでしたが、情報のマーシャリングのバックエンドでデータがどのように処理されているかについての理解不足に対処したため、問題の回答を選択しました。