我想固定.NET对象(包括对象)的数组,以允许本机函数对对象进行一些处理.据我所知,GCHandle.Alloc()不允许我这样做,因为这样的数组包含引用(并且对象也可能包含引用),这些引用不是blittable.
有没有其他选择来实现这一目标?对于非常黑客的建议或需要Mono的建议我会没事的.
我目前正在浏览反编译的C#IL(使用ILSpy),以便了解如何System.Runtime.InteropServices(可能)实现某些方法.当我想检查如何Marshal.Copy()实现时,我发现它只调用CopyToNative(),其定义如下:
// System.Runtime.InteropServices.Marshal
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void CopyToNative(object source, int startIndex, IntPtr destination, int length);
Run Code Online (Sandbox Code Playgroud)
它在哪里实施?有没有机会查看它(反编译)的源代码?如果没有,有没有人知道如何实施?