Interfaccia IModelObject (dbgmodel.h)

Uno degli aspetti più semplici e potenti del modello di dati è che standardizza la definizione di ciò che un oggetto è e il modo in cui interagisce con un oggetto. L'interfaccia IModelObject incapsula la nozione di un oggetto, indipendentemente dal fatto che l'oggetto sia un numero intero, un valore a virgola mobile, una stringa, un tipo complesso nello spazio indirizzi di destinazione del debugger o un concetto di debugger come la nozione di un processo o di un modulo.

Esistono diversi elementi che possono essere mantenuti in (o boxed in) in un IModelObject:

• Valori intrinseci: un IModelObject può essere un contenitore per diversi tipi di base: 8, 16, 32 o integer senza segno a 64 bit, valori booleani, stringhe, errori o la nozione di valori vuoti.

• Oggetti nativi : un IModelObject può rappresentare un tipo complesso (come definito dal sistema di tipi del debugger) all'interno dello spazio indirizzi di qualsiasi destinazione del debugger

• Oggetti sintetici - Un IModelObject può essere un oggetto dinamico - un dizionario se si vuole: una raccolta di tuple chiave/valore/metadati e un set di concetti che definiscono i comportamenti che non sono semplicemente rappresentati da coppie chiave/valore.

• Proprietà : un IModelObject può rappresentare una proprietà: un elemento il cui valore può essere recuperato o modificato con una chiamata al metodo. Una proprietà all'interno di un IModelObject è in effetti un'interfaccia IModelPropertyAccessor boxed in un IModelObject

• Metodi - Un IModelObject può rappresentare un metodo: un elemento che è possibile chiamare con un set di argomenti e ottenere un valore restituito. Un metodo all'interno di un IModelObject è effettivamente un'interfaccia IModelMethod boxed in un IModelObject

Un IModelObject non è un oggetto in isolamento. Oltre a rappresentare uno dei tipi di oggetti illustrati in precedenza, ogni oggetto ha la nozione di una catena di modelli di dati padre. Questa catena si comporta in modo molto simile a | Catena di prototipi JavaScript. Anziché una catena lineare di prototipi come JavaScript, ogni oggetto modello di dati definisce una catena lineare di modelli padre. Ognuno di questi modelli padre a sua volta ha un'altra catena lineare del proprio set di elementi padre. In sostanza, ogni oggetto è un'aggregazione delle funzionalità (proprietà e così via) di se stesso e di ogni oggetto in questo albero. Quando viene eseguita una query su una proprietà specifica, se l'oggetto su cui viene eseguita una query non supporta tale proprietà, la query viene passata in ordine lineare a ogni elemento padre. In questo modo viene creato un comportamento in cui la ricerca di una proprietà viene risolta da una ricerca depth-first dell'albero di aggregazione.

L'estendibilità all'interno di questo modello a oggetti è molto semplice dato che ogni oggetto è un'aggregazione di se stessa e l'albero dei modelli padre. Un'estensione può entrare e aggiungersi all'elenco dei modelli padre per un altro oggetto . In questo modo l'oggetto viene esteso. In questo modo, è possibile aggiungere funzionalità a qualsiasi elemento: una particolare istanza di un oggetto o un valore, un tipo nativo, il concetto del debugger di un processo o di un thread o persino la nozione di "tutti gli oggetti iterabili".

Ereditarietà

IModelObject eredita da IUnknown.

Metodi

L'interfaccia IModelObject include questi metodi.

 
IModelObject::AddParentModel

Il metodo AddParentModel aggiunge un nuovo modello padre all'oggetto specificato.
IModelObject::AddRef

Il metodo AddRef incrementa il conteggio dei riferimenti per un'interfaccia in un oggetto . Questo metodo appartiene all'interfaccia IModelObject.
IModelObject::ClearConcepts

Il metodo ClearConcepts rimuoverà tutti i concetti dall'istanza dell'oggetto specificato da questo oggetto.
IModelObject::ClearKeys

Il metodo ClearKeys rimuove tutte le chiavi e i relativi valori e metadati associati dall'istanza dell'oggetto specificato da questo oggetto.
IModelObject::Compare

Il metodo Compare confronta due oggetti modello e restituisce un'indicazione della correlazione tra tali oggetti.
IModelObject::D ereference

Il metodo Dereference dereferenzia un oggetto .
IModelObject::EnumerateKeyReferences

Il metodo EnumerateKeyReferences si comporta in modo simile al metodo EnumerateKeyValues, ad eccezione del fatto che restituisce riferimenti alle chiavi enumerate anziché al valore della chiave.
IModelObject::EnumerateKeys

Enumera le chiavi all'interno del provider di chiavi dinamiche.
IModelObject::EnumerateKeyValues

Il metodo EnumerateKeyValues è il primo metodo a cui un client si rivolge per enumerare tutte le chiavi in un oggetto .
IModelObject::EnumerateRawReferences

Il metodo EnumerateRawReferences enumera i riferimenti a tutti gli elementi figlio nativi (campi, classi di base e così via) dell'oggetto specificato.
IModelObject::EnumerateRawValues

Il metodo EnumerateRawValues enumera tutti gli elementi figlio nativi (campi, classi di base e così via) dell'oggetto specificato.
IModelObject::GetConcept

Il metodo GetConcept cercherà un concetto nell'oggetto (o nella relativa catena di modelli padre) e restituirà un puntatore di interfaccia all'interfaccia del concetto.
IModelObject::GetContext

Il metodo GetContext restituisce il contesto host associato all'oggetto .
IModelObject::GetContextForDataModel

Il metodo GetContextForDataModel viene usato per recuperare le informazioni sul contesto configurate con una chiamata precedente a SetContextForDataModel.
IModelObject::GetIntrinsicValue

Il metodo GetIntrinsicValue restituisce l'elemento sottoposto a boxing all'interno di un oggetto IModelObject.
IModelObject::GetIntrinsicValueAs

Il metodo GetIntrinsicValueAs si comporta in modo molto simile al metodo GetIntrinsicValue, ad eccezione del fatto che converte il valore nel tipo variant specificato.
IModelObject::GetKey

Il metodo GetKey otterrà il valore di (e i metadati associati a) una determinata chiave in base al nome.
IModelObject::GetKeyReference

Se l'oggetto o uno dei modelli padre ha una chiave denominata in base all'argomento 'key', verrà restituito un riferimento a tale chiave.
IModelObject::GetKeyValue

Il metodo GetKeyValue è il primo metodo a cui un client si rivolge per ottenere il valore di (e i metadati associati a) una determinata chiave in base al nome.
IModelObject::GetKind

Il metodo GetKind restituisce il tipo di oggetto sottoposto a boxing all'interno di IModelObject.
IModelObject::GetLocation

Il metodo GetLocation restituirà la posizione dell'oggetto nativo. Anche se tale posizione è in genere un indirizzo virtuale all'interno dello spazio indirizzi della destinazione di debug, non è necessariamente così.
IModelObject::GetNumberOfParentModels

Il metodo GetNumberOfParentModels restituisce il numero di modelli padre associati all'istanza dell'oggetto specificata.
IModelObject::GetParentModel

Il metodo GetParentModel restituisce il modello padre i-th nella catena di modelli padre dell'oggetto specificato.
IModelObject::GetRawReference

Il metodo GetRawReference trova un costrutto nativo all'interno dell'oggetto specificato e restituisce un riferimento.
IModelObject::GetRawValue

Il metodo GetRawValue trova un costrutto nativo all'interno dell'oggetto specificato. Un costrutto di questo tipo può essere un campo, una classe base, un campo in una classe base, una funzione membro e così via.
IModelObject::GetTargetInfo

Il metodo GetTargetInfo è in effetti una combinazione dei metodi GetLocation e GetTypeInfo che restituiscono sia la posizione astratta che il tipo nativo dell'oggetto specificato.
IModelObject::GetTypeInfo

Il metodo GetTypeInfo restituirà il tipo nativo dell'oggetto specificato. Se all'oggetto non sono associate informazioni sul tipo nativo, la chiamata avrà comunque esito positivo ma restituirà Null.
IModelObject::IsEqualTo

Il metodo IsEqualTo confronta un contesto host con un altro contesto host. Se i due contesti sono equivalenti, viene restituita un'indicazione. Si noti che questo confronto non è l'equivalenza dell'interfaccia.
IModelObject::QueryInterface

Il metodo IModelObject::QueryInterface recupera i puntatori alle interfacce supportate in un oggetto .
IModelObject::Release

Il metodo IModelObject::Release decrementa il conteggio dei riferimenti per un'interfaccia in un oggetto .
IModelObject::RemoveParentModel

RemoveParentModel rimuoverà un modello padre specificato dalla catena di ricerca padre dell'oggetto specificato.
IModelObject::SetConcept

Il metodo SetConcept inserisce un concetto specificato nell'istanza dell'oggetto specificata dal puntatore.
IModelObject::SetContextForDataModel

Il metodo SetContextForDataModel viene usato dall'implementazione di un modello di dati per inserire i dati di implementazione negli oggetti dell'istanza.
IModelObject::SetKey

Il metodo SetKey è il metodo a cui un client si rivolge per creare una chiave su un oggetto (e potenzialmente associare i metadati alla chiave creata).
IModelObject::SetKeyValue

Il metodo SetKeyValue è il primo metodo a cui un client si rivolge per impostare il valore di una chiave. Questo metodo non può essere usato per creare una nuova chiave in un oggetto.
IModelObject::TryCastToRuntimeType

Il metodo TryCastToRuntimeType chiederà all'host di debug di eseguire un'analisi e determinare il tipo di runtime effettivo (la classe più derivata) dell'oggetto specificato.

Requisiti

Requisito Valore
Intestazione dbgmodel.h