为什么我不能使用GcHandle.Alloc来固定枚举数组

时间:2011-10-02 19:48:22

标签: c# pinvoke

我想做以下事情:

public enum Blah
{
    A,B
}

[Test,Explicit]
public void TestEnumGcHandle()
{
    var ea = new Blah[10];
    GCHandle.Alloc(ea, GCHandleType.Pinned);
}

但我明白了:

System.ArgumentException : Object contains non-primitive or non-blittable data.

Are .net Enums blittable types? (Marshalling)声称Enums是blittable,但我无法确定它们的数组。这可能是GcHandle.Alloc中的一个错误吗?我正在使用.NET 3.5。

1 个答案:

答案 0 :(得分:3)

在我的书中有点笨拙但是枚举不是原始的(typeof(Blah).IsPrimitive是假的)而不是blittable。它在blittable types列表中缺失。关联的SO问题是错误的。问题是,没有办法找出原生枚举的底层整数类型的大小。我认为,这很重要,因为肯定有一种方法可以在托管枚举类型中指定它。好吧,不能这样做。