다음을 통해 공유


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

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

이러한 두 접근 방식에 대한 자세한 내용은 프로파일링 API 메서드 규칙를 참조하십시오.

요구 사항

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

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

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

참고 항목

참조

ICorProfilerInfo 인터페이스

ICorProfilerInfo2 인터페이스

기타 리소스

프로파일링 인터페이스

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