1

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 数组。

4

0 回答 0