Поделиться через


Метод ICorProfilerInfo2::GetClassLayout

Получает сведения о структуре полей в памяти, которые были определенны заданным классом. Иными словами, этот метод получает смещение полей класса.

HRESULT GetClassLayout(
    [in]  ClassID classID,
    [in, out] COR_FIELD_OFFSET rFieldOffset[],
    [in]  ULONG cFieldOffset,
    [out] ULONG *pcFieldOffset,
    [out] ULONG *pulClassSize);

Параметры

  • classID
    [in] Идентификатор класса, для которого будет получена структура.

  • rFieldOffset
    [in, out] Массив структур COR_FIELD_OFFSET, каждая из которых содержит маркеры и смещения полей класса.

  • cFieldOffset
    [in] Размер массива rFieldOffset.

  • pcFieldOffset
    [out] Указатель на общее число доступных элементов. Если значение параметра cFieldOffset равно 0, это значение указывает на число необходимых элементов.

  • pulClassSize
    [out] Указатель на расположение, содержащее размер класса (в байтах).

Заметки

Метод GetClassLayout возвращает только поля, определенные самим классом. Если в родительском классе данного класса также определены поля, для их получения профилировщик должен вызвать для родительского класса метод GetClassLayout.

При использовании GetClassLayout со строковыми классами метод завершится неудачно с кодом ошибки E_INVALIDARG. ICorProfilerInfo2::GetStringLayout позволяет получить сведения о структуре строки. Также произойдет сбой GetClassLayout при вызове его классом массива.

После возвращения значения методом GetClassLayout необходимо убедится, что размер буфера rFieldOffset был достаточно велик для помещения в него всех доступных структур COR_FIELD_OFFSET. Для этого нужно сравнить значение, на которое указывает параметр pcFieldOffset, с размером параметра rFieldOffset, деленным на размер структуры COR_FIELD_OFFSET. Если значение rFieldOffset недостаточно велико, нужно выделить буфер rFieldOffset большего размера, обновить значение параметра cFieldOffset новым, большим значением и вызвать метод GetClassLayout снова.

Кроме того, сначала можно вызвать метод GetClassLayout с буфером rFieldOffset нулевой длины для получения правильного размера буфера. А затем указать в качестве размера буфера значение, возвращенное в параметре pcFieldOffset, и вызвать метод GetClassLayout снова.

Дополнительные сведения об этих двух подходах см. в разделе Соглашения методов интерфейса API для профилирования.

Требования

Платформы: см. раздел Требования к системе для .NET Framework.

Заголовок: CorProf.idl, CorProf.h

Библиотека: CorGuids.lib

Версии платформы .NET Framework: 4, 3.5 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0

См. также

Ссылки

Интерфейс ICorProfilerInfo

Интерфейс ICorProfilerInfo2

Другие ресурсы

Профилирующие интерфейсы

Профилирование (справочник по неуправляемым интерфейсам API)