Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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;
}
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.
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.
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.
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.
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;
}
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.
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;
}
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.
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