Metodo IPreferredRuntimeTypeConcept::CastToPreferredRuntimeType (dbgmodel.h)
Il metodo CastToPreferredRuntimeType viene chiamato ogni volta che un client desidera tentare di eseguire la conversione da un'istanza di tipo statico al tipo di runtime di tale istanza. Se l'oggetto in questione supporta (tramite uno dei modelli padre associati) il concetto di tipo di runtime preferito, questo metodo verrà chiamato per eseguire la conversione. Questo metodo può restituire l'oggetto originale (non è disponibile alcuna conversione o non è stato possibile analizzarlo), restituire una nuova istanza del tipo di runtime, non riuscire per motivi non semantici (ad esempio, memoria insufficiente) o restituire E_NOT_SET. Il codice di errore E_NOT_SET è un codice di errore molto speciale che indica al modello di dati che l'implementazione non vuole eseguire l'override del comportamento predefinito e che il modello di dati deve eseguire il fallback a qualsiasi analisi eseguita dall'host di debug (ad esempio, analisi RTTI, esame della forma delle tabelle delle funzioni virtuali, ecc.
Sintassi
HRESULT CastToPreferredRuntimeType(
IModelObject *contextObject,
_COM_Errorptr_ IModelObject **object
);
Parametri
contextObject
Oggetto istanza tipizzato in modo statico (questo puntatore) per il quale eseguire l'analisi e tentare di eseguire il downcast al tipo di runtime.
object
Se si è verificata una conversione in un tipo di runtime, si tratta di una nuova istanza tipizzata in base al tipo di runtime. Se non è stato possibile eseguire l'analisi o non è stata apportata alcuna modifica al tipo, potrebbe trattarsi dell'oggetto originale.
Valore restituito
Questo metodo restituisce HRESULT che indica l'esito positivo o negativo.
Osservazioni
Implementazione di esempio di :
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;
}
Fabbisogno
Requisito | Valore |
---|---|
intestazione | dbgmodel.h |