我使用的是具有回调函数的C接口,其中软件正在处理指针。
在C#端,我有以下代码用于将指针复制到托管数组并返回,例如
float *
.
class FloatPointer
{
readonly unsafe float* _pointer;
public uint Size { get; set; }
public float[] Array { get; set; }
public unsafe void CopyToPointer ()
{
int length = (int)Math.Min (Size, Array.Length);
Marshal.Copy (Array, 0, (IntPtr)_pointer, length);
for (int i = length; i < Size; i++) {
_pointer [i] = 0;
}
}
unsafe float[] CopyFromPointer ()
{
float[] result = new float[Size];
Marshal.Copy ((IntPtr)_pointer, result, 0, (int)Size);
return result;
}
public unsafe FloatPointer (float* pointer, uint size)
{
_pointer = pointer;
Size = size;
Array = CopyFromPointer ();
}
}
因为我也必须这样做
unsigned char*
,
uint*
我在考虑使用一个泛型类,
class Pointer<T>: where T: ValueType
.
不幸的是,这种限制是不可能的。
如果我将其更改为无约束的泛型类,那么
Marshal.Copy
告诉我它不知道
T[]
.
有什么方法可以创建这个泛型类吗?