我遇到了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 ?
答案 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();
}
}
};