Arrays 固定枚举的二维数组

Arrays 固定枚举的二维数组,arrays,enums,c++-cli,pinning,Arrays,Enums,C++ Cli,Pinning,我在将enum从托管层传递到非托管层时遇到了一个特殊问题-基本上是固定enum数组 我的用例是我有一个引用类型(T)的1D数组,其中包含一个缓冲区(由字节支持的enum的2D数组) 缓冲区(由字节支持的enum的2D数组)是在托管堆上分配的,我想将该缓冲区传递给非托管层,用一些值填充它。同时,我希望确保在非托管方法将数据填充到缓冲区时,垃圾收集器(GC)不会移动缓冲区。为了做到这一点,我必须固定缓冲区。我用于托管代码的语言是C++/CLI,,它提供了两种固定缓冲区的方法 cli::pin_pt

我在将
enum
从托管层传递到非托管层时遇到了一个特殊问题-基本上是固定
enum
数组

我的用例是我有一个引用类型(T)的1D数组,其中包含一个缓冲区(由字节支持的
enum
的2D数组)

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

  • cli::pin_ptr
  • GCHandle
由于某些原因,我无法使用
GCHandle
锁定缓冲区-我得到
ArgumentException
-可能是因为
enum
是不可blittable类型

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


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

这对您的数据结构正确吗<代码>引用类MyClass{array^innerTwoDimArray;}
数组^outerArray?看起来你想钉错东西了。正如David所暗示的,请发布您的数据结构,并说明您正试图锁定的部分。这对您的数据结构正确吗<代码>引用类MyClass{array^innerTwoDimArray;}
数组^outerArray?看起来你想钉错东西了。正如David所暗示的,请发布您的数据结构,并说明您正试图锁定的部分。