我有一个特定问题,将enum
从托管图层传递到非托管图层 - 基本上是固定enum
数组。
我的用例是我有一个引用类型(T)的一维数组,它包含一个缓冲区(由字节支持的enum
的二维数组)。
缓冲区(由字节支持的enum
的2D数组)在托管堆上分配,我想将该缓冲区传递给非托管层 - 用一些值填充它。同时,我想确保当非托管方法将数据填充到缓冲区时,垃圾收集器(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数组。