IModelObject ::SetContextForDataModel, méthode (dbgmodel.h)
La méthode SetContextForDataModel est utilisée par l’implémentation d’un modèle de données pour placer des données d’implémentation sur des objets d’instance. Conceptuellement, chaque IModelObject (appelez cette instance par souci de simplicité) contient une table de hachage d’état. La table de hachage est indexée par un autre IModelObject (appelez ce modèle de données par simplicité) qui se trouve dans la hiérarchie du modèle parent de l’instance. La valeur contenue dans ce hachage est un ensemble d’informations d’état comptées de référence représentées par une instance IUnknown. Une fois que le modèle de données définit cet état sur l’instance, il peut stocker des données d’implémentation arbitraires qui peuvent être récupérées pendant des éléments tels que les getters de propriété.
Il est souvent le cas où les extensions (ou d’autres composants de modèle de données) veulent représenter une construction synthétique comme ce que l’on peut considérer comme un type. L’exposition des objets de processus par le débogueur est un exemple de ce type. Souvent, une implémentation mappe la notion de définition de type à un modèle de données. Le modèle de données contient des getters de propriétés pour les éléments exposés sur l’objet (par exemple : nom du processus, ID de processus, nombre de threads, threads, etc.). Quand il est temps de créer une instance de ce modèle de données, un objet synthétique vide est créé et le modèle de données (ou ce que nous pourrions considérer comme la définition de type) est attaché en tant que modèle parent. Dans certains cas, suffisamment d’informations pour identifier l’objet et implémenter tous les getters de propriété du modèle de données peuvent être directement placés sur l’objet d’instance. Dans notre exemple de processus, l’ID de processus peut être stocké en tant que clé nommée ID sur l’instance. Lorsqu’un getter sur le modèle de données est appelé, par exemple pour le nom du processus, l’implémentation peut simplement appeler la méthode GetKeyValue pour extraire l’ID de processus. L’implémentation nécessaire pour retourner le nom peut ensuite le faire à partir du PID. Dans d’autres cas, l’état requis pour implémenter le type est plus complexe, contient d’autres constructions natives, ou pour d’autres raisons ne peut pas être défini en tant que clé d’instance. Dans ce cas, le modèle de données construit une classe dérivée IUnknown, place les données d’implémentation dans cette classe et appelle la méthode SetContextForDataModel sur l’instance afin d’associer ses données d’implémentation à l’objet d’instance. Lorsque l’instance détruit, le nombre de références sur la classe d’état est libéré et il est libéré selon les besoins
Syntaxe
HRESULT SetContextForDataModel(
IModelObject *dataModelObject,
IUnknown *context
);
Paramètres
dataModelObject
Le IModelObject représentant le modèle de données pour lequel l’état est stocké sur un objet d’instance. Il s’agit, en effet, d’une clé de hachage à l’objet d’état associé.
context
État associé à l’instance. La signification exacte de ce (et de toutes les autres interfaces, etc... elle prend en charge) est jusqu’au modèle de données qui effectue l’appel pour définir cet état. La seule exigence est que cet état soit une référence COM comptée.
Valeur de retour
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
Exemple de code
ComPtr<IModelObject> spObject; /* get an object */
ComPtr<IModelObject> spDataModelObject; /* get an attached data model (from earlier
AddParentModel or from GetParentModel) anywhere in
the ancestor tree */
// Context data must be IUnknown derived. Otherwise, implementation is opaque to the data model.
class MyContextData :
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
IUnknown
>
{
/* put whatever you want here */
};
ComPtr<MyContextData> spContextData = Microsoft::WRL::Make<MyContextData>();
if (SUCCEEDED(spObject->SetContextForDataModel(spDataModelObject.Get(), spContextData.Get())))
{
// There is now context data associated with spObject (an instance) for
// spDataModelObject (a parent model). This can be fetched via
// GetContextForDataModel. Note that spObject and spDataModelObject only need t
// to be related. The model does not need to be an immediate parent.
}
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |