我有一个本机函数,它需要在C和C#中引用结构定义,如下所示:
typedef struct _dataBlob
{
DWORD length;
BYTE *data;
} DataBlob
[StructLayout(layoutKind.Sequential)]
public struct DataBlob
{
public uint length;
public byte[] data;
}
我会通过ref将它传递给本机函数,它工作得很好。根据我的理解,结构在调用之前为我固定,并在调用返回时取消固定。我不确定的是,当它为我引入这个结构时,它是否也固定结构中引用的byte []?我是否必须将其固定以确保GC在通话期间不会移动它?是否需要设置一些属性以确保它被固定或者在本机堆上为我创建了副本?