固定大小的字符串get / set

时间:2014-01-12 13:15:28

标签: c#

我遇到了struct中的固定大小字符串和数据绑定的get / set方法的问题。

我的结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
    public int Var1 { get; set; }
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string Var2;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string Var3;
    public int Var4 { get; set; }
};

当我设置{get;对于Var2和Var3,我得到错误:

  

错误CS0592:属性'MarshalAs'在此声明中无效   类型。它仅对'field,param,return'声明有效。

我如何为Var2 / Var3制作set / get方法,不改变struct size

1 个答案:

答案 0 :(得分:3)

问题是string是C#类型,无法映射到C类型。尝试将字符串私有地编组为char[] s,并将它们转换为C#中的字符串(无编组)。您还需要更改MarshalAs以表示您将编组数组,而不是字符串。

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
    public int Var1 { get; set; }
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
    private char[] _Var2;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
    private char[] _Var3;
    public int Var4 { get; set; }

    public string Var2 {
        get {
            return new string(_var2);
        }
        set {
            this._var2 = value.ToCharArray();
        }
    }
    public string Var3 {
        get {
            return new string(_var3);
        }
        set {
            this._var3 = value.ToCharArray();
        }
    }
};