MarshalAsAttribute.SizeParamIndex Поле

Определение

Указывает параметр, содержащий отсчитываемое от нуля количество элементов массива, аналогичный параметру size_is в COM.

public short SizeParamIndex;

Значение поля

Примеры

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();
    }
}

Комментарии

Поле SizeParamIndex поддерживает вызовы из управляемого в неуправляемый и неуправляемый. Он не оказывает никакого влияния на управляемый код, который вызывает COM-объекты.

В зависимости от управляемого типа и применяемых к нему атрибутов массив может быть передан как безопасный массив или массив В стиле C.

Если массивы передаются как массивы В стиле C, маршалер не может определить размер массива. Поэтому для передачи управляемого массива в неуправляемую функцию или метод необходимо указать два аргумента:

  • Массив, определяемый ссылкой или значением.

  • Размер массива, определяемый ссылкой или значением.

Отсчитываемый от нуля индекс параметра размера массива определяется с помощью SizeParamIndex поля .

Если указать и SizeParamIndexMarshalAsAttribute.SizeConst с помощью UnmanagedType.LPArray поля, сумма значений полей создает общий размер.

Дополнительные сведения см. в разделе Маршалинг по умолчанию для массивов.

Применяется к

Өнім Нұсқалар
.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

См. также раздел