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 |