MarshalAs。UnmanagedType
MarshalAs。。。。UnmanagedType【求助】
问题是这样的
我声明的结构体如下:
其实我的需求很简单,就是,当我把Repository结构体写入磁盘的时候。
Name占128字节。
但是Name可能只有12字节,但是我需要后面空出116字节,然后再写入下面的location的2个字节。
字符集使用unicode
但是
MarshalAs这个特性的参数里面UnmanagedType 这个枚举里面关于字符串的很多,难以看懂啊。。。虽然MSDN中有描述而且也是中文,但是,说实话,中文我也看不懂。。。感觉描述很不直观,难以理解。
因此,麻烦有哪位老大介绍一下要怎么实现。
[MarshalAs(这里面怎么填写,,理由是什么)]谢谢。
——————————————————————————————————————————————————————我换了一种方式,是这样的:
但是在使用的时候又遇到问题了,丫的。。。
使用的时候如下:
问题是这样的
我声明的结构体如下:
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 rpty=new Repository();
rpty.Name="table1".ToPointer();//这一句报错,报错内容为 赋值号左边必须是变量、属性或索引器