将固定和字节 * 从 c# 转换为 vb.net

alw*_*NET 3 c# vb.net

我在 c# 中有以下代码,并想在 VB.NET 中转换它。我不确定它们是什么fixed以及byte*如何转换。Telerik 转换器对此不提供任何帮助。

fixed (byte* ptrShapeBufferPtr = pointerInfo.PtrShapeBuffer)
{
    mDeskDupl.GetFramePointerShape(
           frameInfo.PointerShapeBufferSize, 
           (IntPtr)ptrShapeBufferPtr, 
           out pointerInfo.BufferSize, 
           out pointerInfo.ShapeInfo);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Vis*_*ent 5

由于 VB.NET 不支持指针,因此您必须IntPtr改用 。最简单的方法是使用GCHandle. 然后您使用该AddrOfPinnedObject方法将其指针作为IntPtr.

Dim handle As GCHandle

Try
    handle = GCHandle.Alloc(pointerInfo.PtrShapeBuffer, GCHandleType.Pinned)
    Dim ptrShapeBufferPtr As IntPtr = handle.AddrOfPinnedObject()

    mDeskDupl.GetFramePointerShape(frameInfo.PointerShapeBufferSize, ptrShapeBufferPtr, pointerInfo.BufferSize, pointerInfo.ShapeInfo)
Finally
    If handle.IsAllocated = True Then handle.Free()
End Try
Run Code Online (Sandbox Code Playgroud)

请注意,这更像是一种快速而肮脏的解决方案。GCHandle预计不会像这样使用,但它可以工作并且(AFAIK)仍然可以使用。还有其他(更长的)方法可以做到这一点,这些方法更专为此类事情而设计。

  • 不要忘记`尝试..最后`。您不想留下 GC 句柄。 (2认同)