参考文档https://blog.csdn.net/bcbobo21cn/article/details/70092997
Marshal类的功能:将数据从托管对象封送到非托管内存块
int personSize = Marshal.SizeOf( typeof(Person) );
IntPtr intPer = Marshal.AllocHGlobal( personSize );
//将数据从托管对象封送到非托管内存块,该内存块开始地址为intPtr
Marshal.StructureToPtr( person, intPer, true );
//将数据从非托管内存块封送到新分配的指定类型的托管对象anotherPerson
Person anotherPerson=Marshal.PtrToStructure( intPer, typeof(Person) );
person:托管对象,包含封存的数据,是一个对象
intPer:指向非托管内存的指针,调用前要分配该指针