Метод 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
См. также
Ссылки
Другие ресурсы
Профилирование (справочник по неуправляемым интерфейсам API)