public static void Seek(this IStream stream, long dlibMove, STREAM_SEEK dwOrigin, out long plibNewPosition) { var plibNewPositionPtr = Marshal.AllocCoTaskMem(8); try { stream.Seek(dlibMove, dwOrigin, plibNewPositionPtr); plibNewPosition = Marshal.ReadInt64(plibNewPositionPtr, 0); } finally { Marshal.FreeCoTaskMem(plibNewPositionPtr); } }