enum
我有一个从托管层传递到非托管层的特定问题- 基本上是固定enum
数组。
我的用例是我有一个引用类型(T)的一维数组,其中包含一个缓冲区(enum
由字节支持的二维数组)。
缓冲区(由字节支持的二维数组enum
)在托管堆上分配,我想将该缓冲区传递给非托管层 - 用一些值填充它。同时我想确保垃圾收集器(GC)在非托管方法向缓冲区填充数据时不会移动缓冲区。为了做到这一点,我必须固定缓冲区。我用于托管代码的语言C++/CLI,
提供了两种固定缓冲区的方式
cli::pin_ptr
GCHandle
出于某种原因,我无法使用固定缓冲区GCHandle
- 我得到ArgumentException
- 可能是因为enum
是非 blittable 类型。
我可以使用固定缓冲区cli::pin_ptr
,但是问题cli::pin_ptr
是因为讨论中的引用类型数组(其中包含缓冲区 - 由字节支持的枚举的二维数组)可以是可变长度的,我将需要多个pin_ptr
(数组pin_ptr
)来每个引用类型实例中的引脚缓冲区。而且我不能拥有cli::pin_ptr
.
这阻碍了我在 .NET 应用程序中实现特定功能 - 因为我无法enum
正确固定 2D 数组。