虽然类型还是 valuetype IMAGE_DATA_DIRECTORY[],但因为 marshal( fixed array [16]) 的修饰,此数组已经从引用语义改为值语义。不过这样做还是会受到一些限制,如不能多层嵌套、使用时性能受到影响等等。 除了上述两种在结构定义本身做文章的解决方法,还可以从结构的操作上做文章。 此类结构除了对结构内数组的访问外,主要的操作类型就是从内存块或输入流中读取整个结构,因此完全可以使用 CLR 提高的二进制序列化支持,通过实现自定义序列化函数来完成数据的载入和保存,如: 以下内容为程序代码: [Serializable] public struct IMAGE_OPTIONAL_HEADER : ISerializable { public const int IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16; public ushort Magic; public uint NumberOfRvaAndSizes; public IMAGE_DATA_DIRECTORY[] DataDirectory; public IMAGE_OPTIONAL_HEADER(IntPtr ptr) { Magic = 0; NumberOfRvaAndSizes = 0; DataDirectory = new IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } [Se页码:[1] [2] [3] [4] [5] [6] [7] [8] 第6页、共8页 |