1

我正在尝试将一些 pInvoke 方法调用转换为 Silverlight 5,但遇到了一个问题。我将如何做相当于在 Silverlight 5 中调用 UnsafeAddrOfPinnedArrayElement 的操作?

 public int Read(byte[] buffer, int index, int length)
    {
        var gch = GCHandle.Alloc(buffer);
        try
        {
             //Desktop .NET Framework code:              
             //var ptr = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, index);

             //WHAT IS THE SL 5 Equivalent here?

             //TODO Call some pinvoke code that requires 'ptr'

        }
        finally
        {
            gch.Free();
        }
    }
4

1 回答 1

1

从我正在阅读的内容来看,UnsafeAddrOfPinnedArrayElement 只是获取数组中元素的内存地址,为什么不自己实现呢?您还可以避免再次分配整个缓冲区...

public int Read(byte[] buffer, int index, int length)
{
    unsafe
    {
        fixed(byte *ptr = buffer)
        {
            byte *ptr = ptr + index;
        }
    }
}
于 2011-12-31T10:36:19.447 回答