MarshalAsAttribute.SizeParamIndex Pole

Definicja

Wskazuje parametr oparty na zerze, który zawiera liczbę elementów tablicy, podobnie jak size_is w modelu COM.

public short SizeParamIndex;

Wartość pola

Przykłady

using System.Runtime.InteropServices;
using SomeNamespace;

namespace SomeNamespace
{
    // Force the layout of your fields to the C style struct layout.
    // Without this, the .NET Framework will reorder your fields.
    [StructLayout(LayoutKind.Sequential)]
    public struct Vertex
    {
        float	x;
    float	y;
        float	z;
    }

    class SomeClass
    {
        // Add [In] or [In, Out] attributes as approppriate.
        // Marshal as a C style array of Vertex, where the second (SizeParamIndex is zero-based)
        //  parameter (size) contains the count of array elements.
        [DllImport ("SomeDll.dll")]
        public static extern void SomeUnsafeMethod(
                                      [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Vertex[] data,
                                      long size );

        public void SomeMethod()
        {
            Vertex[] verts = new Vertex[3];
            SomeUnsafeMethod( verts, verts.Length );
        }
    }
}

class Test
{
    public static void Main()
    {
        SomeClass AClass = new SomeClass();

        AClass.SomeMethod();
    }
}

Uwagi

Pole SizeParamIndex obsługuje zarządzane i niezarządzane i niezarządzane wywołania. Nie ma żadnego wpływu na kod zarządzany, który wywołuje obiekty COM.

W zależności od typu zarządzanego i zastosowanych do niego atrybutów tablica może być przekazywana jako bezpieczna tablica lub tablica w stylu C.

Gdy tablice są przekazywane jako tablice w stylu C, marshaler nie może określić rozmiaru tablicy. W związku z tym, aby przekazać tablicę zarządzaną do niezarządzanej funkcji lub metody, należy podać dwa argumenty:

  • Tablica zdefiniowana przez odwołanie lub wartość.

  • Rozmiar tablicy zdefiniowany przez odwołanie lub wartość.

Indeks zerowy parametru rozmiaru tablicy jest definiowany przy użyciu SizeParamIndex pola .

Jeśli określisz zarówno SizeParamIndex pole, jak i MarshalAsAttribute.SizeConst z polem UnmanagedType.LPArray , suma wartości pól generuje sumę rozmiaru.

Aby uzyskać więcej informacji, zobacz Domyślne przeprowadzanie marshalingu dla tablic.

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Zobacz też