不能获取地址,获取大小,或声明指向托管类型的指针('类型名称')

时间:2010-04-01 09:28:36

标签: .net pointers string struct

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

我尝试过这样的事情:

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

但它似乎不起作用。

3 个答案:

答案 0 :(得分:5)

如果结构是blittable,则只能获取结构的地址,即它不包含引用 见Blittable and Non-Blittable Types(MSDN)

答案 1 :(得分:1)

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

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

private fixed byte _C_Name[25];

字符串是固定类型的,因此当您将它们声明为String时,您不会收到错误。 希望它适合你!

问候!

答案 2 :(得分:0)

尝试MarshalAs属性:

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