IModelObject::SetContextForDataModel-Methode (dbgmodel.h)

Die SetContextForDataModel-Methode wird von der Implementierung eines Datenmodells verwendet, um Implementierungsdaten auf instance-Objekten zu platzieren. Konzeptionell enthält jedes IModelObject (der Einfachheit halber die instance nennen) eine Hashtabelle mit dem Zustand. Die Hashtabelle wird von einem anderen IModelObject indiziert (nennen Sie dies der Einfachheit halber das Datenmodell), das sich in der übergeordneten Modellhierarchie des instance befindet. Der in diesem Hash enthaltene Wert ist ein Satz von Verweiszählungsstatusinformationen, die durch eine IUnknown-instance dargestellt werden. Sobald das Datenmodell diesen Zustand auf dem instance festgelegt hat, kann es beliebige Implementierungsdaten speichern, die z. B. bei Eigenschaften gettern abgerufen werden können.

Es ist häufig der Fall, dass Erweiterungen (oder andere Datenmodellkomponenten) ein synthetisches Konstrukt als einen Typ darstellen möchten. Ein beispiel hierfür ist die Offenlegung von Prozessobjekten durch den Debugger. Häufig weist eine Implementierung den Begriff einer Typdefinition einem Datenmodell zu. Das Datenmodell enthält Eigenschaften getter für die Dinge, die für das Objekt verfügbar gemacht werden (z. B. Prozessname, Prozess-ID, Threadanzahl, Threads usw.). Wenn es an der Zeit ist, eine instance dieses Datenmodells zu erstellen, wird ein leeres synthetisches Objekt erstellt, und das Datenmodell (oder die Typdefinition) wird als übergeordnetes Modell angefügt. In einigen Fällen können genügend Informationen zum eindeutigen Identifizieren des Objekts und zum Implementieren aller Eigenschaften getter des Datenmodells direkt im instance-Objekt platziert werden. In unserem Prozessbeispiel kann die Prozess-ID als Schlüssel mit dem Namen ID auf dem instance gespeichert werden. Wenn ein Getter für das Datenmodell aufgerufen wird, z. B. für den Prozessnamen, kann die Implementierung einfach die GetKeyValue-Methode aufrufen, um die Prozess-ID abzurufen. Die implementierung, die zum Zurückgeben des Namens erforderlich ist, kann dies dann über die PID tun. In anderen Fällen ist der für die Implementierung des Typs erforderliche Zustand komplexer, enthält andere native Konstrukte oder kann aus anderen Gründen nicht als instance-Schlüssel festgelegt werden. In solchen Fällen erstellt das Datenmodell eine von IUnknown abgeleitete Klasse, platziert die Implementierungsdaten in dieser Klasse und ruft die SetContextForDataModel-Methode auf dem instance auf, um die Implementierungsdaten dem instance-Objekt zuzuordnen. Wenn die instance zerstört wird, wird die Verweisanzahl für die Zustandsklasse freigegeben und nach Bedarf freigegeben.

Syntax

HRESULT SetContextForDataModel(
  IModelObject *dataModelObject,
  IUnknown     *context
);

Parameter

dataModelObject

Das IModelObject, das das Datenmodell darstellt, für das der Zustand in einem instance -Objekt gespeichert wird. Dies ist in der Tat ein Hashschlüssel für das zugeordnete Zustandsobjekt.

context

Der Zustand, der dem instance zugeordnet ist. Die genaue Bedeutung dieses (und aller anderen Schnittstellen usw.), die es unterstützt, hängt vom Datenmodell ab, das den Aufruf zum Festlegen dieses Zustands vornimmt. Die einzige Voraussetzung ist, dass dieser Zustand COM-Verweis gezählt ist.

Rückgabewert

Diese Methode gibt HRESULT zurück, das auf Erfolg oder Fehler hinweist.

Hinweise

Codebeispiel

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.
}

Anforderungen

Anforderung Wert
Header dbgmodel.h

Weitere Informationen

IModelObject-Schnittstelle