Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die RegisterModelForTypeSignature-Methode ist die primäre Methode, die ein Aufrufer verwendet, um eine kanonische Visualisierung für einen bestimmten Typ (oder einen Satz von Typen) zu registrieren. Eine kanonische Visualisierung ist ein Datenmodell, das tatsächlich die Anzeige eines bestimmten Typs (oder einer Gruppe von Typen) übernimmt. Anstelle der nativen/Sprachansicht des Typs, der in jeder Debugger-Benutzeroberfläche angezeigt wird, wird die Ansicht des Typs angezeigt, der vom registrierten Datenmodell dargestellt wird (zusammen mit einer Möglichkeit, zur nativen/Sprachansicht für einen Benutzer zurückzukehren, der ihn wünscht). Die Typsignatur, die an diese Methode übergeben wird, kann mit mehreren konkreten Typen übereinstimmen. Wenn für eine bestimmte Typinstanz mehrere Übereinstimmungen vorhanden sind, wird nur die beste Übereinstimmung zurückgegeben. Eine Typsignatur wird als eine bessere Übereinstimmung betrachtet als eine andere, wenn sie sich genauer auf einen bestimmten konkreten Typ bezieht. Beispiele:
A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>
Wenn die drei oben genannten Signaturen (A, B und C) registriert und anhand eines konkreten Typs überprüft werden:
std::pair<int, float>
Alltype-Signaturen stimmen mit dieser Typinstanz überein. Die zweite ist eine bessere Übereinstimmung als die erste, da int (das erste Vorlagenargument von B) eine bessere Übereinstimmung als ein Platzhalter (das erste Vorlagenargument von A) ist. Ebenso ist der dritte eine bessere Übereinstimmung als die zweite (es handelt sich um eine gesamte Übereinstimmung ohne Platzhalter).
Die RegisterModelForTypeSignature-Methode lässt nicht zu, dass doppelte Typsignaturen registriert werden. Für eine bestimmte Typsignatur kann nur ein Datenmodell als kanonische Visualisierung registriert werden. Ein Versuch, dieselbe Typsignatur zweimal zu registrieren, schlägt fehl. Ebenso lässt die RegisterModelForTypeSignature-Methode keine Typsignaturen zu, die mehrdeutig mit jeder Typinstanz übereinstimmen können, die registriert werden soll. Beispiel:
D) std::pair<int, *>
E) std::pair<*, int>
Die beiden obigen Signaturen (D und E) können nicht beide registriert werden. Für einige Typen ist klar, welche Signatur gilt und am besten geeignet ist. Zum Beispiel
std::pair<int, float>
Stimmt nur mit dem ersten dieser (D) überein, da "Float" und "int" nicht übereinstimmen. Es ist jedoch völlig mehrdeutig, wenn man Folgendes in Betracht zieht:
std::pair<int, int>
Eine dieser Signaturen ist gleich gut (beide haben eine konkrete und eine Wildcard-Übereinstimmung). Diese Typsignaturen sind mehrdeutig. Aus diesem Grund schlägt ein Aufruf zur Registrierung des zweiten Anrufs fehl.
Syntax
HRESULT RegisterModelForTypeSignature(
IDebugHostTypeSignature *typeSignature,
IModelObject *dataModel
);
Parameter
typeSignature
Die Typsignatur, die registriert wird. Jedes systemeigene/spracheigene Objekt eines konkreten Typs, der am besten mit dieser Typsignatur übereinstimmt, hat das vom DataModel-Argument angegebene Datenmodell automatisch angefügt.
dataModel
Das Datenmodell, das zur kanonischen Visualisierung für Typen wird, die der angegebenen Typsignatur entsprechen.
Rückgabewert
Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt. Diese Methode kann keine identischen oder mehrdeutigen Typsignaturen registrieren.
Bemerkungen
Beispielcode-
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IDebugHost> spHost; /* get the debug host */
ComPtr<IModelObject> spDataModel; /* create a data model (see
CreateDataModelObject) */
ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
// Create a signature to match MyType<*>
ComPtr<IDebugHostTypeSignature> spTypeSignature;
if (SUCCEEDED(spSym->CreateTypeSignature(L"MyType<*>",
nullptr,
&spTypeSignature)))
{
// Register the model for std::vector<*>
if (SUCCEEDED(spManager->RegisterModelForTypeSignature(spTypeSignature.Get(),
spDataModel.Get()))
{
// Every instance matching MyType<*> will now have spDataModel
// attached as the parent. Further, such parent is considered
// the canonical visualizer for all types matching MyType<*> since
// it was registered via RegisterModelForTypeSignature instead of
// RegisterExtensionForTypeSignature.
}
}
}
Anforderungen
| Anforderung | Wert |
|---|---|
| Header- | dbgmodel.h |