다음을 통해 공유


ICorProfilerInfo2::GetClassLayout 메서드

업데이트: 2007년 11월

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

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을 사용하는 경우 메서드가 실패하지는 않지만 반환되는 데이터가 올바르지 않습니다. 문자열에 레이아웃이 지정되는 방법에 대한 자세한 정보를 가져오려면 ICorProfilerInfo2::GetStringLayout을 사용합니다. GetClassLayout은 배열 클래스와 함께 호출될 경우 실패합니다.

GetClassLayout이 반환된 후 사용 가능한 모든 COR_FIELD_OFFSET 구조체를 포함할 만큼 rFieldOffset 버퍼가 충분히 큰지 확인해야 합니다. 이렇게 하려면 pcFieldOffset이 가리키는 값과 rFieldOffset 크기를 COR_FIELD_OFFSET 구조체 크기로 나눈 값을 비교합니다. rFieldOffset이 충분히 크지 않으면 더 큰 rFieldOffset 버퍼를 할당하고 cFieldOffset을 새로운 큰 크기로 업데이트한 다음 GetClassLayout을 다시 호출합니다.

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

이 두 가지 방법에 대한 자세한 내용은 프로파일링 API의 호출자 할당 버퍼를 참조하십시오.

요구 사항

플랫폼:.NET Framework 시스템 요구 사항 참조

헤더: CorProf.idl

라이브러리: CorGuids.lib

.NET Framework 버전: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

참고 항목

참조

ICorProfilerInfo

ICorProfilerInfo2

기타 리소스

프로파일링 인터페이스

프로파일링(관리되지 않는 API 참조)