ICorProfilerInfo2::GetClassLayout 메서드

지정된 클래스에서 정의된 필드의 레이아웃(메모리)에 대한 정보를 가져옵니다. 즉, 이 메서드는 클래스의 필드 오프셋을 가져옵니다.

구문

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

매개 변수

classID
[in] 레이아웃이 검색되는 클래스의 ID입니다.

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을 다시 호출합니다.

또는 길이가 0인 rFieldOffset 버퍼로 GetClassLayout를 먼저 호출하여 올바른 버퍼 크기를 구합니다. 그런 다음 버퍼 크기를 pcFieldOffset에 반환된 값으로 설정하고 GetClassLayout을 다시 호출합니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

.NET Framework 버전: 2.0부터 사용 가능

참고 항목