Sdílet prostřednictvím


Další rozhraní pro datový model ladicího programu C++

Toto téma popisuje některá další rozhraní přidružená k datovému modelu C++ ladicího programu, jako jsou metadata, koncepty a výčet objektů.

rozhraní metadat datového modelu ladicího programu

Jedním ze základních pojmů v datovém modelu je, že objekt (zejména syntetický) je slovník řazených kolekcí klíč/hodnota/metadat. Každý klíč může mít přidružené celé úložiště metadat, které popisuje celou řadu věcí kolem klíče a jeho potenciální hodnoty. Všimněte si, že metadata nijak nemění hodnotu klíče. Jedná se pouze o doplňkové informace spojené s klíčem a jeho hodnotou, které mohou ovlivnit prezentaci nebo jiné přidružené atributy klíče a jeho hodnoty.

V některých smyslech se úložiště metadat neliší od kolekcí členů klíč/hodnota/metadat, které jsou podstatou objektu v datovém modelu. Z tohoto zobrazení je však zjednodušená. Úložiště metadat je reprezentováno rozhraním IKeyStore. Kolekce kolekcí řazených kolekcí klíčů/hodnot/metadat jsou sice omezená tím, co se dá dělat s úložištěm klíčů metadat a s objektem modelu:

  • Úložiště klíčů může mít pouze jedno nadřazené úložiště – nemůže mít libovolný řetězec nadřazených modelů.
  • Úložiště klíčů nemá žádné koncepty. Může mít pouze slovník řazených kolekcí členů klíč/hodnota/metadat. To znamená, že klíče, které jsou přítomné v úložišti klíčů, jsou statické. Systém dynamického jazyka je nemůže vytvářet na vyžádání.
  • Pouze podle konvence jsou hodnoty v úložišti klíčů definovaných metadaty omezeny na základní hodnoty (vnitřní objekty a přístupové objekty vlastností).

I když úložiště klíčů může mít libovolné číslo (a libovolné pojmenování) klíčů, existují určité názvy, které mají definované sémantické hodnoty. V současné době jsou tyto názvy:

Název klíče Typ hodnoty Popis
PreferredRadix Celé číslo: 2, 8, 10 nebo 16 Určuje, v jakém radixu má být zobrazena pořadová hodnota.
PreferredFormat Celé číslo: definované výčtem PreferredFormat Určuje upřednostňovaný typ formátování pro zobrazení hodnoty.
PreferredLength Integer U polí a dalších kontejnerů určuje, kolik prvků se má ve výchozím nastavení zobrazit.
FindDerivation Booleovská logika Určuje, jestli má hostitel ladění před použitím provést odvozenou analýzu typu pro hodnotu (např. zobrazení).
Pomoc Řetězec Text nápovědy ke stylu popisu nástroje pro klíč, který může uživatelské rozhraní prezentovat vhodným způsobem.
ActionName Řetězec Označuje, že daná metoda (jedna, která nepřijímá žádné argumenty a nevrací žádné hodnoty) je akce. Název akce se zadává v metadatech. Uživatelské rozhraní může tento název využít k zobrazení možnosti v místní nabídce nebo jiném vhodném rozhraní.
ActionIsDefault Booleovská logika Platné pouze v případě, že je zadán klíč ActionName, indikuje, že se jedná o výchozí akci objektu.
Popis actionDescription Řetězec Platný pouze v případě, že je zadán klíč ActionName, zobrazí popis stylu popisu popisu akce. Takový text může být prezentován uživatelským rozhraním vhodným způsobem.

Všimněte si, že zatímco klíče v úložišti metadat můžou mít vlastní metadata (ad infiniteum), v současné době se pro takové použití nepoužívá. Většina volajících zadá hodnotu null pro všechny parametry metadat v metodách v rozhraní IKeyStore.

rozhraní základních metadat: IKeyStore

Rozhraní IKeyStore je definováno takto:

DECLARE_INTERFACE_(IKeyStore, IUnknown)
{
   STDMETHOD(GetKey)(_In_ PCWSTR key, _COM_Errorptr_opt_ IModelObject** object, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
   STDMETHOD(SetKey)(_In_ PCWSTR key, _In_opt_ IModelObject* object, _In_opt_ IKeyStore* metadata) PURE;
   STDMETHOD(GetKeyValue)(_In_ PCWSTR key, _COM_Errorptr_opt_ IModelObject** object, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
   STDMETHOD(SetKeyValue)(_In_ PCWSTR key, _In_ IModelObject* object) PURE;
   STDMETHOD(ClearKeys)() PURE;
}

GetKey

Metoda GetKey je analogická k GetKey metoda na IModelObject. Vrátí hodnotu zadaného klíče, pokud existuje v úložišti klíčů nebo v nadřazené úložišti klíčů. Všimněte si, že pokud hodnota klíče je přistupovací objekt vlastnosti, GetValue metoda nebude volána na objektu property accessor. Vrátí se skutečný IModelPropertyAccessor do objektu IModelObject. Je typické, že klient bude z tohoto důvodu volat GetKeyValue.

SetKey

Metoda SetKey je analogická k SetKey metoda v IModelObject. Je to jediná metoda, která dokáže vytvořit klíč a přidružovat k němu metadata v úložišti klíčů.

GetKeyValue

GetKeyValue metoda je první metoda, na kterou klient přejde, aby zjistil hodnotu konkrétního klíče v úložišti metadat. Pokud klíč zadaný argumentem klíče existuje v úložišti (nebo nadřazené úložiště), vrátí se hodnota tohoto klíče a všechna metadata přidružená k němu. Pokud je hodnota klíče objektu property accessor (IModelPropertyAccessor boxed do IModelObject), GetValue metoda objektu property accessor automaticky bude volána GetKeyValue a základní hodnota vrácené vlastnosti.

SetKeyValue

Metoda SetKeyValue je analogická k SetKeyValue metoda na IModelObject. Tato metoda nemůže vytvořit nový klíč v úložišti metadat. Pokud existuje existující klíč, jak je uvedeno v argumentu klíče, jeho hodnota se nastaví, jak je uvedeno. Pokud je klíč objektu property accessor, SetValue metoda bude volána u objektu property accessor, aby se nastavil podkladová hodnota. Všimněte si, že metadata jsou obvykle po vytvoření statická. Použití této metody v úložišti klíčů metadat by mělo být zřídka.

ClearKeys

Metoda ClearKeys je analogická k ClearKeys metoda v IModelObject. Odebere každý klíč z daného úložiště metadat. Tato metoda nemá žádný vliv na žádné nadřazené úložiště.

výčtu objektu v datovém modelu

vytvoření výčtu objektů v datového modelu

V datovém modelu existují dvě základní rozhraní výčtu klíčů: IKeyEnumerator a IRawEnumerator. I když se jedná o dvě základní rozhraní, lze je použít k vytvoření výčtu objektů v jednom ze tří stylů:

klíče – rozhraní IKeyEnumerator lze získat voláním EnumerateKeys, aby bylo možné vytvořit výčet klíčů objektu a jejich hodnot/metadat bez překladu jakýchkoli přístupových objektů podkladových vlastností. Tento styl výčtu může vrátit nezpracované hodnoty IModelPropertyAccessor boxed do IModelObjects.

Hodnoty – rozhraní IKeyEnumerator a IRawEnumerator lze získat prostřednictvím volání enumerateKeyValues nebo EnumerateRawValues, aby bylo možné v objektu a jejich hodnotách/metadatech vytvořit výčet hodnot klíčů/nezpracovaných hodnot. Všechny přístupové objekty vlastností, které jsou přítomné v výčtu, jsou automaticky vyřešeny voláním základní GetValue metoda během takového výčtu.

Reference - Rozhraní IKeyEnumerator a IRawEnumerator lze získat prostřednictvím volání EnumerateKeyReferences nebo EnumerateRawReferences, aby bylo možné vytvořit výčet odkazů na klíče/nezpracované hodnoty objektu. Tyto odkazy lze uložit a později použít k získání nebo nastavení základního klíče nebo nezpracované hodnoty.

KeyEnumerator: Výčet syntetických klíčů

IKeyEnumerator rozhraní je jediné rozhraní pro výčet všech klíčů (podle klíče, hodnoty nebo odkazu) v rámci objektu instance a všech přidružených nadřazených modelů v nadřazené řetězci modelu. Rozhraní je definováno takto:

DECLARE_INTERFACE_(IKeyEnumerator, IUnknown)
{
    STDMETHOD(Reset)() PURE;
    STDMETHOD(GetNext)(_Out_ BSTR* key, _COM_Errorptr_opt_ IModelObject** value, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
}

Resetování

Metoda Reset resetuje enumerátor na pozici, ve které byl poprvé získán (např. před prvním prvkem výčtu). Následné volání GetNext vrátí první výčtový klíč.

GetNext

Metoda GetNext přesune enumerátor dopředu a vrátí klíč na této pozici v výčtu.

IRawEnumerator: Výčet nativních nebo základních konstruktorů jazyka (C/C++)

IRawEnumerator rozhraní je jediné rozhraní pro výčet všech konstruktorů nativního jazyka (podle hodnoty nebo odkazu) v objektu, který představuje nativní konstruktor v adresním prostoru cíle ladění. Rozhraní je definováno takto:

DECLARE_INTERFACE_(IRawEnumerator, IUnknown)
{
    STDMETHOD(Reset)() PURE;
    STDMETHOD(GetNext)(_Out_opt_ BSTR* name, _Out_opt_ SymbolKind *kind, _COM_Errorptr_opt_ IModelObject** value) PURE;
}

Resetování

Metoda Reset resetuje enumerátor na pozici, ve které byl poprvé získán (např. před prvním prvkem výčtu). Následné volání GetNext vrátí první výčet nativní/jazykové konstruktor.

GetNext

Metoda GetNext přesune enumerátor vpřed a vrátí nativní/jazyk konstruktoru na této pozici v výčtu.


Viz také

Toto téma je součástí řady, která popisuje rozhraní přístupná z jazyka C++, jak je použít k sestavení rozšíření ladicího programu založeného na jazyce C++ a jak využít jiné konstruktory datového modelu (např. JavaScript nebo NatVis) z rozšíření datového modelu jazyka C++.

Přehled datového modelu Ladicího programu C++

rozhraní datového modelu C++ ladicího programu

objekty C++ datového modelu ladicího programu

koncepty datového modelu Ladicího programu C++

skriptování datového modelu Ladicího programu C++