다음을 통해 공유


IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType 메서드(dbgmodel.h)

CastToPreferredRuntimeType 메서드는 클라이언트가 정적 형식 instance 해당 instance 런타임 형식으로 변환하려고 할 때마다 호출됩니다. 해당 개체가 기본 설정 런타임 형식 개념을 지원하는 경우(연결된 부모 모델 중 하나를 통해) 변환을 수행하기 위해 이 메서드가 호출됩니다. 이 메서드는 원래 개체를 반환하거나(변환이 없거나 분석할 수 없음) 런타임 형식의 새 instance 반환하거나, 의미 체계가 아닌 이유로 실패하거나(예: 메모리 부족) E_NOT_SET 반환할 수 있습니다. E_NOT_SET 오류 코드는 구현이 기본 동작을 재정의하지 않고 데이터 모델이 디버그 호스트에서 수행하는 분석(예: RTTI 분석, 가상 함수 테이블의 모양 검사)으로 대체되어야 했음을 데이터 모델에 나타내는 매우 특별한 오류 코드입니다. 등...)

구문

HRESULT CastToPreferredRuntimeType(
  IModelObject                *contextObject,
  _COM_Errorptr_ IModelObject **object
);

매개 변수

contextObject

분석을 수행하고 런타임 형식으로 다운캐스트를 시도할 정적으로 형식화된 instance 개체(이 포인터)입니다.

object

런타임 형식으로의 변환이 발생한 경우 런타임 형식에 따라 입력된 새 instance. 분석을 수행할 수 없거나 형식이 변경되지 않은 경우 원래 개체일 수 있습니다.

반환 값

이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다.

설명

구현 예제:

IFACEMETHOD(CastToPreferredRuntimeType)(_In_ IModelObject *pContextObject, 
                                        _COM_Outptr_ IModelObject **ppRuntimeObject)
{
    HRESULT hr = S_OK;
    *ppRuntimeObject = nullptr;

    ComPtr<IModelObject> spRuntimeObject;

    // Imagine this was on a class for a data model registered against some 
    // IFoo type where IFoo was always backed by CFoo (the type of which is 
    // stored in m_spType) and the offset between IFoo and CFoo was m_runtimeOffset.
    Location loc;
    hr = pContextObject->GetLocation(&loc);
    if (SUCCEEDED(hr))
    {
        loc.Offset -= m_runtimeOffset;

        // By passing 'nullptr' as the context, it will inherit its context 
        // from the passed type.  Sufficient for *THIS* purpose in *MOST* cases.
        hr = GetManager()->CreateTypedObject(nullptr, 
                                             loc, 
                                             m_spType.Get(), 
                                             &spRuntimeObject);
    }

    if (SUCCEEDED(hr))
    {
        *ppRuntimeObject = spRuntimeObject.Detach();
    }

    return hr;
}

요구 사항

요구 사항
헤더 dbgmodel.h

추가 정보

IPreferredRuntimeTypeConcept 인터페이스