다음을 통해 공유


IDebugComPlusSymbolProvider::GetLocalVariablelayout

레이아웃의 지역 변수를 메서드 집합을 검색합니다.

HRESULT GetLocalVariablelayout(
   ULONG32   ulAppDomainID,
   GUID      guidModule,
   ULONG32   cMethods,
   _mdToken  rgMethodTokens[],
   IStream** pStreamLayout
);
int GetLocalVariablelayout(
   uint        ulAppDomainID,
   Guid        guidModule,
   uint        cMethods,
   int[]       rgMethodTokens,
   out IStream pStreamLayout
);

매개 변수

  • ulAppDomainID
    [in] 응용 프로그램 도메인의 식별자입니다.

  • guidModule
    [in] 모듈의 고유 식별자입니다.

  • cMethods
    [in] 많은 메서드 토큰에 rgMethodTokens 배열입니다.

  • rgMethodTokens
    [in] 메서드 토큰의 배열입니다.

  • pStreamLayout
    [out] 변수 레이아웃이 포함 하는 텍스트 스트림.

반환 값

성공 하면 반환 S_OK. 그렇지 않으면 오류 코드를 반환 합니다.

예제

다음 예제에서는이 메서드를 구현 하는 방법을 보여 줍니다 있는 CDebugSymbolProvider 를 노출 하는 개체는 IDebugComPlusSymbolProvider 인터페이스.

HRESULT CDebugSymbolProvider::GetLocalVariablelayout(
    ULONG32 ulAppDomainID, 
    GUID guidModule, 
    ULONG32 cMethods, 
    _mdToken rgMethodTokens[], 
    IStream** ppStreamLayout)
{
    HRESULT hr = S_OK;

    METHOD_ENTRY(CDebugSymbolProvider::GetLocalVariablelayout);

    CComPtr<ISymUnmanagedReader> symReader;
    IfFailRet(GetSymUnmanagedReader(ulAppDomainID, guidModule, (IUnknown **) &symReader));
    CComPtr<IStream> stream;
    IfFailRet(CreateStreamOnHGlobal(NULL, true, &stream));

    for (ULONG32 iMethod = 0; iMethod < cMethods; iMethod += 1)
    {
        CComPtr<ISymUnmanagedMethod> method;
        IfFailRet(symReader->GetMethod(rgMethodTokens[iMethod], &method));
        CComPtr<ISymUnmanagedScope> rootScope;
        IfFailRet(method->GetRootScope(&rootScope));

        //
        // Add the method's variables to the stream
        //
        IfFailRet(AddScopeToStream(rootScope, 0, stream));

        // do end of method marker
        ULONG32 depth = 0xFFFFFFFF;
        ULONG cb = 0;
        IfFailRet(stream->Write(&depth, sizeof(depth), &cb));
    }

    LARGE_INTEGER pos;
    pos.QuadPart = 0;
    IfFailRet(stream->Seek(pos, STREAM_SEEK_SET, 0));
    *ppStreamLayout = stream.Detach();

    METHOD_EXIT(CDebugSymbolProvider::GetLocalVariablelayout, hr);
    return hr;
}

참고 항목

참조

IDebugComPlusSymbolProvider