通过ref使用非托管结构有任何不利之处吗?

时间:2019-06-30 15:33:28

标签: c# struct unmanaged ref

在许多api示例中,我们将IntPtr用作结构的指针,并且据我所知,人们会分配新的内存,复制所有数据,然后按照我的理解创建新的结构。或者他们使用Marshal.PtrToStructure()。使用Marshal.PtrToStructure()和仅引用Struct有什么区别?如果我只需要读取一些结构数据。

[DllImport("some.dll")]
static extern IntPtr GetPoint(IntPtr point);

delegate IntPtr GetPointDelegate(IntPtr point);

// assing function that will be invoked
GetPointDelegate callback = ConsumePoint;

// delegate implementation
IntPtr ConsumePoint(IntPtr ptr)
{
    Point point = (Point)Marshal.PtrToStructure(ptr, typeof(Point));
    // do stuff with point
    return IntPtr.Zero;
}
[DllImport("some.dll")]
static extern IntPtr GetPoint(ref Point point);

delegate IntPtr GetPointDelegate(ref Point point);

GetPointDelegate callback = ConsumePoint;

IntPtr ConsumePoint(ref Point point)
{
    // do stuff with point
    return IntPtr.Zero;
}

这有何不同? 这是翻译成同一件事吗?还是第二种方法更有效,但是使用它时会有一些危险?

0 个答案:

没有答案