Megosztás a következőn keresztül:


Hibakereső adatmodell C++ további felületei

Ez a témakör a Hibakereső C++ adatmodellhez kapcsolódó további felületeket ismerteti, például metaadatokat, fogalmakat és objektum-enumerálást.

Hibakereső adatmodell metaadatainak felületei

Az adatmodell egyik alapvető fogalma, hogy egy objektum (különösen egy szintetikus) kulcs-/érték-/metaadat-vonások szótára. Minden kulcshoz a metaadatok teljes tára társítható, amely a kulcs és a lehetséges érték körül számos dolgot ír le. Vegye figyelembe, hogy a metaadatok semmilyen módon nem módosítják a kulcs értékét. Csak a kulcshoz és értékéhez kapcsolódó kiegészítő információk, amelyek befolyásolhatják a kulcs és az érték bemutatását vagy más társított attribútumait.

Bizonyos értelemben a metaadat-tároló nem mindenben különbözik az adatmodellben található objektumok lényegét képező kulcs-/érték-/metaadat-kulccsal. Ez azonban leegyszerűsítve van ebből a nézetből. A metaadattárat az IKeyStore felület jelöli. Bár a kulcs-/érték-/metaadat-gyűjtemények gyűjteménye is, a metaadatkulcs-tárolóval és a modellobjektumokkal elvégezhető feladatokra is korlátozások vonatkoznak:

  • A kulcstárolók csak egyetlen szülőtárolóval rendelkezhetnek – nem rendelkezhetnek szülőmodellek tetszőleges láncával.
  • A kulcstárolókban nincsenek fogalmak. Csak a kulcs/érték/metaadatok szótárával rendelkezhet. Ez azt jelenti, hogy a kulcstárolóban található kulcsok statikusak. Dinamikus nyelvi rendszer nem tudja igény szerint létrehozni őket.
  • Csak konvenció szerint a metaadatok által definiált kulcstárolók értékei az alapértékekre korlátozódnak (belső és tulajdonságkiegészítők)

Bár a kulcstárolók tetszőleges számmal (és tetszőleges elnevezéssel) rendelkezhetnek, vannak bizonyos nevek, amelyek szemantikai értékeket definiáltak. Jelenleg ezek a nevek a következők:

Kulcs neve Érték típusa Leírás
PreferredRadix Egész szám: 2, 8, 10 vagy 16 Azt jelzi, hogy az ordinális érték mely radixán jelenjen meg
PreferredFormat Egész szám: a PreferredFormat enumerálás által meghatározottak szerint Az érték megjelenítéséhez előnyben részesített formázási típust jelzi
PreferredLength Egész szám Tömbök és egyéb tárolók esetén azt jelzi, hogy alapértelmezés szerint hány elem jelenjen meg
FindDerivation Booleán Azt jelzi, hogy a hibakeresési gazdagépnek a használat előtt származtatott típuselemzést kell-e végeznie az értéken (pl. megjelenítés)
Segítség Sztring Az eszköztipp stílusa súgószöveget nyújt a kulcshoz, amelyet a felhasználói felület a megfelelő módon mutat be.
ActionName Sztring Azt jelzi, hogy az adott metódus (amely nem vesz fel argumentumokat, és nem ad vissza értékeket) egy művelet. A művelet neve a metaadatokban van megadva. A felhasználói felület ezt a nevet használhatja a helyi menüben vagy más megfelelő felületen történő beállításhoz
ActionIsDefault Booleán Csak akkor érvényes, ha az ActionName kulcs meg van adva, azt jelzi, hogy ez az objektum alapértelmezett művelete.
ActionDescription Sztring Csak akkor érvényes, ha az ActionName kulcs meg van adva, ez az eszköztipp stílusának leírását adja meg a művelethez. Az ilyen szöveget a felhasználói felület megfelelően hasznos módon tudja megjeleníteni.

Vegye figyelembe, hogy bár a metaadattár kulcsainak lehetnek saját metaadataik (ad infiniteum), jelenleg nincs erre használható. A legtöbb hívó null értéket ad meg az IKeyStore felület metódusaiban található metaadat-paraméterekhez.

Alapvető metaadatok kezelőfelülete: IKeyStore

Az IKeyStore felület a következőképpen van definiálva:

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

A GetKey metódus az IModelObject GetKey metódusához hasonló. A megadott kulcs értékét adja vissza, ha a kulcstárolóban vagy a kulcstároló szülőtárolójában található. Vegye figyelembe, hogy ha a kulcs értéke tulajdonság-tartozék, akkor a GetValue metódus nem lesz meghívva a tulajdonság tartozékán. A rendszer visszaadja az IModelPropertyAccessor IModelObjectbe bekeretezett tényleges IModelPropertyAccessort. Az ügyfél általában emiatt hívja meg a GetKeyValue-t.

SetKey

A SetKey metódus hasonló az IModelObject SetKey metódusához. Ez az egyetlen módszer, amely képes kulcs létrehozására és metaadatok társítására a kulcstárolóban.

GetKeyValue

A GetKeyValue metódus az első metódus, ahová az ügyfél a metaadattárban található egy adott kulcs értékének megkereséséhez. Ha a kulcsargumentum által megadott kulcs megtalálható a tárolóban (vagy a szülőtárolóban), a rendszer visszaadja a kulcs értékét és a hozzá társított metaadatokat. Ha a kulcs értéke tulajdonság-tartozék (egy IModelPropertyAccessor egy IModelObjectbe van bekeretezve), a getValue metódust a GetKeyValue automatikusan meghívja, és a visszaadott tulajdonság mögöttes értékét.

SetKeyValue

A SetKeyValue metódus hasonló az IModelObject SetKeyValue metódusához. Ez a módszer nem képes új kulcsot létrehozni a metaadattárban. Ha van egy meglévő kulcs, amelyet a kulcs argumentuma jelez, annak értéke a megadott módon lesz beállítva. Ha a kulcs tulajdonság-tartozék, a SetValue metódus a tulajdonság tartozékán lesz meghívva a mögöttes érték beállításához. Vegye figyelembe, hogy a metaadatok létrehozása általában statikus. Ennek a metódusnak a metaadatkulcs-tárolóban való használatának ritkán kell lennie.

ClearKeys

A ClearKeys metódus hasonló az IModelObject ClearKeys metódusához. Eltávolítja az összes kulcsot a megadott metaadattárból. Ez a módszer nincs hatással a szülőtárolókra.

Objektum számbavétele az adatmodellben

Objektumok számbavétele az adatmodell

Az adatmodellben két alapvető kulcs-enumerálási felület található: az IKeyEnumerator és az IRawEnumerator. Bár ezek a két alapvető interfészek, az objektumok számbavételére használhatók a három stílus egyikében:

Kulcsok – Az IKeyEnumerator felület az EnumerateKeys hívásával szerezhető be, hogy egy objektum kulcsait és értékeit/metaadatait számba lehessen venni anélkül, hogy bármilyen mögöttes tulajdonság-tartozékot feloldanának. Ez a számbavételi stílus nyers IModelPropertyAccessor-értékeket adhat vissza az IModelObjectsbe bekeretezett nyers IModelPropertyAccessor értékekkel.

Értékek – Az IKeyEnumerator és az IRawEnumerator interfész az EnumerateKeyValues vagy az EnumerateRawValues hívásával szerezhető be, hogy számba lehessen venni egy objektum kulcsait/nyers értékeit és azok értékeit/metaadatait. Az enumerálásban található tulajdonságkiegészítők automatikusan feloldódnak az alapul szolgáló GetValue metódus meghívásával egy ilyen számbavétel során.

Hivatkozások – Az IKeyEnumerator és az IRawEnumerator interfészek az EnumerateKeyReferences vagy az EnumerateRawReferences hívásával szerezhetők be az objektumok kulcsára/nyers értékeire mutató hivatkozások számbavételéhez. Ezek a hivatkozások menthetők, és később felhasználhatók a mögöttes kulcs vagy a nyers érték lekérésére vagy beállítására.

KeyEnumerator: Szintetikus kulcsok számbavétele

Az IKeyEnumerator interfész az egyetlen interfész a példányobjektumban lévő összes kulcs (kulcs, érték vagy hivatkozás) és a szülőmodell-lánc összes társított szülőmodelljének számbavételéhez. Az interfész a következőképpen van definiálva:

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

Visszaállítás

A Reset metódus visszaállítja az enumerátort arra a pozícióra, ahol az első beolvasáskor volt (például: az enumerálás első eleme előtt). A GetNext egy későbbi hívása az első számbavételi kulcsot adja vissza.

GetNext

A GetNext metódus mindkét lépés előre viszi az enumerátort, és visszaadja a kulcsot az enumerálás adott pozíciójában.

IRawEnumerator: Natív vagy mögöttes nyelv (C/C++) számbavétele

Az IRawEnumerator interfész az objektumon belüli összes natív/nyelvi szerkezet számbavételének egyetlen felülete (érték vagy hivatkozás alapján), amely egy natív szerkezetet jelöl a hibakeresési cél címterében. Az interfész a következőképpen van definiálva:

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

Visszaállítás

A Reset metódus visszaállítja az enumerátort arra a pozícióra, ahol az első beolvasáskor volt (például: az enumerálás első eleme előtt). A GetNext későbbi hívása az első számba adott natív/nyelvi szerkezetet adja vissza.

GetNext

A GetNext metódus mindkét lépés előre viszi az enumerátort, és visszaadja a natív/nyelvi szerkezetet az enumerálás ezen pozíciójában.


Lásd még:

Ez a témakör egy olyan sorozat része, amely leírja a C++-ból elérhető felületeket, a C++ alapú hibakeresőbővítmények készítésének módját, valamint azt, hogy miként használhat más adatmodell-szerkezeteket (pl. JavaScript vagy NatVis) egy C++ adatmodell-bővítményből.

Hibakereső adatmodell C++ áttekintése

Hibakereső adatmodell C++ interfészei

Hibakereső adatmodell C++ objektumai

Hibakereső adatmodell C++ fogalmai

Hibakereső adatmodell C++ szkriptelési