代码之家  ›  专栏  ›  技术社区  ›  Behrooz

无法获取托管类型(“类型名称”)的地址、大小或声明指针

  •  3
  • Behrooz  · 技术社区  · 16 年前

    如果结构中有一个或多个System.String,则此错误将停止编译
    还有其他存储字符串的方法吗?

    我试过这样的方法:

    private long _B_ID;
    private byte[] _C_Name;
    private byte[] _C_Address;
    private byte[] _C_Telephone;
    

    但这似乎不起作用。

    3 回复  |  直到 15 年前
        1
  •  5
  •   CodesInChaos    15 年前

    只有当结构是可直接复制的,即不包含引用时,才能获取它的地址。
    Blittable and Non-Blittable Types(MSDN)

        2
  •  1
  •   Swanand    15 年前

    即使使用“unsafe”,也不能声明指向非固定类型的指针。要消除此错误,必须指定数组的大小以及关键字fixed。

    例如,名称包含25个字节。所以声明为:

    private fixed byte _C_Name[25];
    

    字符串是固定类型的,因此声明为字符串时不会出错。 希望它对你有用!

    当做!

        3
  •  0
  •   dalle    16 年前

    试试 MarshalAs 属性:

    struct Foo
    {
        [MarshalAs(UnmanagedType.LPStr]
        string s;
    }