固定枚举的二维数组

时间:2016-02-09 20:43:41

标签: arrays enums c++-cli pinning

我有一个特定问题,将enum从托管图层传递到非托管图层 - 基本上是固定enum数组。

我的用例是我有一个引用类型(T)的一维数组,它包含一个缓冲区(由字节支持的enum的二维数组)。

缓冲区(由字节支持的enum的2D数组)在托管堆上分配,我想将该缓冲区传递给非托管层 - 用一些值填充它。同时,我想确保当非托管方法将数据填充到缓冲区时,垃圾收集器(GC)不会移动缓冲区。为了做到这一点,我必须固定缓冲区。我用于托管代码的语言是C++/CLI,,它提供了两种固定缓冲区的方法

  • cli::pin_ptr
  • GCHandle

出于某种原因,我无法使用GCHandle固定缓冲区 - 我得到ArgumentException - 可能是因为enum是非blittable类型。

我可以使用cli::pin_ptr固定缓冲区,但cli::pin_ptr的问题是因为讨论中的引用类型数组(包含缓冲区 - 由字节支持的枚举的二维数组),可以是可变的长度,我将需要多个pin_ptrpin_ptr数组)来固定每个引用类型实例中的缓冲区。我不能有cli::pin_ptr的数组。

这阻碍了我在.NET应用程序中实现特定功能 - 因为我无法正确地固定enum的2D数组。

0 个答案:

没有答案