日期:2014-05-17  浏览次数:21219 次

MarshalAs。。。。UnmanagedType【求助】
本帖最后由 shigaofei1 于 2013-01-20 07:13:51 编辑
问题是这样的
我声明的结构体如下:


        public struct Repository
        {
            public Repository()
            { 
                
            }

            /// <summary>
            /// 仓库名称
            /// </summary>
            [FieldOffset(0)]
            [MarshalAs(UnmanagedType.选哪一个,后面n多参数该怎么填写。。。)]
            public string Name{get;set;}

            /// <summary>
            /// 指针
            /// </summary>
            [FieldOffset(128)]
            public ushort location{get;set;}

        }


其实我的需求很简单,就是,当我把Repository结构体写入磁盘的时候。
Name占128字节。
但是Name可能只有12字节,但是我需要后面空出116字节,然后再写入下面的location的2个字节。

字符集使用unicode
但是
MarshalAs这个特性的参数里面UnmanagedType 这个枚举里面关于字符串的很多,难以看懂啊。。。虽然MSDN中有描述而且也是中文,但是,说实话,中文我也看不懂。。。感觉描述很不直观,难以理解。
因此,麻烦有哪位老大介绍一下要怎么实现。
[MarshalAs(这里面怎么填写,,理由是什么)]谢谢。


——————————————————————————————————————————————————————我换了一种方式,是这样的:

        [StructLayout(LayoutKind.Explicit,Pack=1,CharSet=CharSet.Unicode,Size=64)]
        public unsafe struct Repository
        {

            /// <summary>
            /// 仓库名称
            /// </summary>
            [FieldOffset(0)]
            public fixed char Name[32];

            /// <summary>
            /// 指针
            /// </summary>
            [FieldOffset(128)]
            public ushort location;

        }



但是在使用的时候又遇到问题了,丫的。。。
使用的时候如下:


            Repository