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

标签 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)声称枚举是可复制的,但我无法固定它们的数组。这可能是 GcHandle.Alloc 中的错误吗?我正在使用 .NET 3.5。

最佳答案

这在我的书中有点笨拙,但枚举不是原始的(typeof(Blah).IsPrimitive 是假的)并且不可 blittable。 blittable types 列表中缺少它.链接的 SO 问题是错误的。问题是无法找出 native 枚举的基础整数类型的大小。我认为是用力过猛,因为肯定有一种方法可以在托管枚举类型中指定它。好吧,做不到。

关于c# - 为什么我不能使用 GcHandle.Alloc 固定枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628769/

相关文章:

c# - 在 SQL Server 中使用 GO 关键字

c# - 如何从其隐藏代码访问资源字典中的控件?

c# - 编码嵌套在结构中的可变大小的结构数组

c# - 将 C++ 结构体 union 转换为 C#

c# - StyleCop XML 文档 header - 使用 3///而不是 2//

c# - 一次只检查一个 ListViewItem

c# - 通过 LibTiff.Net 从 Stream 加载的 Tiff 没有字段值

c# - 如何将 ProcessInfo 转换为 WTS_PROCESS_INFO

c# - 如何检查使用 SetThreadExecutionState 禁用 sleep 是否失败?

c# - P/调用错误或我做错了吗?