Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp worden enkele aanvullende interfaces beschreven die zijn gekoppeld aan het gegevensmodel Debugger C++ zoals metagegevens, concepten en objectumeratie.
metagegevensinterfaces voor foutopsporingsprogramma
Een van de kernbegrippen in het gegevensmodel is dat een object (met name een synthetische) een woordenlijst is van sleutel-waarde-/metagegevens tuples. Elke sleutel kan een volledig archief met metagegevens bevatten die eraan zijn gekoppeld, waarin verschillende dingen rondom de sleutel en de mogelijke waarde worden beschreven. Houd er rekening mee dat de metagegevens op geen enkele manier de waarde van de sleutel wijzigen. Het is alleen aanvullende informatie die is gekoppeld aan de sleutel en de waarde ervan die van invloed kunnen zijn op de presentatie of andere bijbehorende kenmerken van de sleutel en de bijbehorende waarde.
In sommige opzichten is een metagegevensarchief niet helemaal anders dan de sleutel-waarde-/metagegevens tuples die de essentie zijn van een object in het gegevensmodel. Het is echter vanuit deze weergave vereenvoudigd. Een metagegevensarchief wordt vertegenwoordigd door de IKeyStore-interface. Hoewel er ook een verzameling sleutel-/waarde-/metagegevens tuples is, gelden er beperkingen voor wat kan worden gedaan met een sleutelarchief voor metagegevens versus een modelobject:
- Een sleutelarchief kan slechts één bovenliggend archief hebben. Het kan geen willekeurige keten van bovenliggende modellen hebben.
- Een sleutelarchief heeft geen concepten. Het kan alleen de woordenlijst van sleutel-/waarde-/metagegevens-tuples hebben. Dit betekent dat de sleutels die aanwezig zijn in een sleutelarchief statisch zijn. Ze kunnen niet op aanvraag worden gemaakt door een dynamisch taalsysteem.
- Alleen conventies zijn de waarden in een gedefinieerd sleutelarchief met metagegevens beperkt tot basiswaarden (intrinsieke waarden en eigenschapstoegangsors)
Hoewel een sleutelarchief een willekeurig getal (en willekeurige naamgeving) van sleutels kan hebben, zijn er bepaalde namen die semantische waarden hebben gedefinieerd. Op dit moment zijn deze namen:
| Sleutelnaam | Waardetype | Beschrijving |
|---|---|---|
| PreferredRadix | Geheel getal: 2, 8, 10 of 16 | Geeft aan in welke radix een rangtelwaarde moet worden weergegeven |
| PreferredFormat | Integer: zoals gedefinieerd door de opsomming PreferredFormat | Geeft het voorkeursopmaaktype aan voor weergave van de waarde |
| PreferredLength | Integer | Voor matrices en andere containers geeft u aan hoeveel elementen standaard moeten worden weergegeven |
| FindDerivation | Booleaan | Geeft aan of de foutopsporingshost afgeleide typeanalyse moet uitvoeren op de waarde voordat deze wordt gebruikt (bijvoorbeeld: weergeven) |
| Hulp | Draad | Help-tekst in de stijl van knoptips voor de sleutel die op een geschikte manier door de gebruikersinterface kan worden gepresenteerd. |
| ActionName | Draad | Geeft aan dat de opgegeven methode (een methode die geen argumenten accepteert en geen waarden retourneert) een actie is. De naam van de actie wordt opgegeven in metagegevens. Een gebruikersinterface kan deze naam gebruiken om de optie in een contextmenu of een andere geschikte interface weer te geven |
| ActionIsDefault | Booleaan | Alleen geldig als de ActionName-sleutel is opgegeven, geeft aan dat dit de standaardactie voor het object is. |
| ActionDescription | Draad | Alleen geldig als de ActionName-sleutel is opgegeven, geeft dit een beschrijving van de tipstijl van het hulpmiddel voor de actie. Dergelijke tekst kan op een geschikte manier door de gebruikersinterface worden gepresenteerd. |
Houd er rekening mee dat hoewel sleutels in het metagegevensarchief hun eigen metagegevens (ad infiniteum) kunnen hebben, is er momenteel geen gebruik voor dergelijke gegevens. De meeste bellers geven null op voor metagegevensparameters in methoden in de IKeyStore-interface.
The Core Metadata Interface: IKeyStore
De IKeyStore-interface wordt als volgt gedefinieerd:
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;
}
De Methode GetKey is vergelijkbaar met de Methode GetKey in IModelObject. Deze retourneert de waarde van de opgegeven sleutel als deze bestaat in het sleutelarchief of het bovenliggende archief van het sleutelarchief. Als de waarde van de sleutel een eigenschapstoegangsor is, wordt de Methode GetValue niet aangeroepen voor de eigenschapstoegangsor. De werkelijke IModelPropertyAccessor die in een IModelObject wordt geplaatst, wordt geretourneerd. Het is gebruikelijk dat een client GetKeyValue om deze reden aanroept.
De Methode SetKey is vergelijkbaar met de methode SetKey op IModelObject. Het is de enige methode die in staat is om een sleutel te maken en metagegevens eraan te koppelen in het sleutelarchief.
De methode GetKeyValue is de eerste methode waar een client naartoe gaat om de waarde van een bepaalde sleutel in het metagegevensarchief te vinden. Als de sleutel die is opgegeven door het sleutelargument bestaat in het archief (of het bovenliggende archief), wordt de waarde van die sleutel en eventuele bijbehorende metagegevens geretourneerd. Als de waarde van de sleutel een eigenschapstoegangsfunctie is (een IModelPropertyAccessor die in een IModelObject wordt geplaatst), wordt de Methode GetValue van de eigenschapstoegangsfunctie automatisch aangeroepen door GetKeyValue en de onderliggende waarde van de geretourneerde eigenschap.
De methode SetKeyValue is vergelijkbaar met de methode SetKeyValue in IModelObject. Deze methode kan geen nieuwe sleutel maken in het metagegevensarchief. Als er een bestaande sleutel is zoals aangegeven door het sleutelargument, wordt de waarde ervan ingesteld zoals aangegeven. Als de sleutel een eigenschapstoegangsor is, wordt de methode SetValue aangeroepen op de eigenschapstoegangsor om de onderliggende waarde in te stellen. Houd er rekening mee dat metagegevens doorgaans statisch zijn nadat ze zijn gemaakt. Het gebruik van deze methode in een sleutelarchief voor metagegevens moet niet vaak zijn.
De ClearKeys-methode is vergelijkbaar met de ClearKeys-methode op IModelObject. Elke sleutel wordt verwijderd uit het opgegeven metagegevensarchief. Deze methode heeft geen effect op een bovenliggend archief.
Object opsomming in het gegevensmodel
objecten in het gegevensmodel opsommen
Er zijn twee kerninterfaces voor opsommingssleutels in het gegevensmodel: IKeyEnumerator en IRawEnumerator. Hoewel dit de twee kerninterfaces zijn, kunnen ze worden gebruikt om objecten in een van de drie stijlen op te sommen:
Keys - De IKeyEnumerator-interface kan worden verkregen via een aanroep van EnumerateKeys om de sleutels van een object en hun waarden/metagegevens op te sommen zonder onderliggende eigenschapstoegangsors op te lossen. Deze opsommingsstijl kan onbewerkte IModelPropertyAccessor-waarden retourneren die in IModelObjects zijn geplaatst.
Values - De IKeyEnumerator- en IRawEnumerator-interfaces kunnen worden verkregen via aanroepen naar EnumerateKeyValues of EnumerateRawValues om de sleutels/onbewerkte waarden voor een object en hun waarden/metagegevens op te sommen. Alle eigenschapstoegangsors die aanwezig zijn in de opsomming, worden automatisch omgezet via een aanroep naar de onderliggende GetValue-methode tijdens een dergelijke opsomming.
References - De IKeyEnumerator- en IRawEnumerator-interfaces kunnen worden verkregen via aanroepen naar EnumerateKeyReferences of EnumerateRawReferences om verwijzingen naar de sleutels/onbewerkte waarden op een object te inventariseren. Dergelijke verwijzingen kunnen worden opgeslagen en later worden gebruikt om de onderliggende sleutel of onbewerkte waarde op te halen of in te stellen.
KeyEnumerator: Opsomming van synthetische sleutels
De IKeyEnumerator-interface is de enige interface voor de opsomming van alle sleutels (op sleutel, waarde of verwijzing) binnen een exemplaarobject en alle bijbehorende bovenliggende modellen in de bovenliggende modelketen. De interface wordt als volgt gedefinieerd:
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;
}
Met de methode Reset wordt de opsomming opnieuw ingesteld op de positie waarop deze zich bevond toen deze voor het eerst werd verkregen (bijvoorbeeld vóór het eerste element in de opsomming). Een volgende aanroep van GetNext retourneert de eerste geïnventariseerd sleutel.
De GetNext-methode verplaatst de enumerator naar voren en retourneert de sleutel op die positie in de opsomming.
IRawEnumerator: Opsomming van systeemeigen of onderliggende taal (C/C++) constructs
De IRawEnumerator-interface is de enige interface voor de opsomming van alle systeemeigen/taalconstructies (op waarde of verwijzing) binnen een object dat een systeemeigen constructie vertegenwoordigt binnen de adresruimte van het foutopsporingsdoel. De interface wordt als volgt gedefinieerd:
DECLARE_INTERFACE_(IRawEnumerator, IUnknown)
{
STDMETHOD(Reset)() PURE;
STDMETHOD(GetNext)(_Out_opt_ BSTR* name, _Out_opt_ SymbolKind *kind, _COM_Errorptr_opt_ IModelObject** value) PURE;
}
Met de methode Reset wordt de opsomming opnieuw ingesteld op de positie waarop deze zich bevond toen deze voor het eerst werd verkregen (bijvoorbeeld vóór het eerste element in de opsomming). Een volgende aanroep van GetNext retourneert de eerste geïnventariseerd systeemeigen/taalconstructie.
De GetNext-methode verplaatst de enumerator naar voren en retourneert de systeemeigen/taalconstructie op die positie in de opsomming.
Zie ook
Dit onderwerp maakt deel uit van een reeks waarin de interfaces worden beschreven die toegankelijk zijn vanuit C++, hoe u deze kunt gebruiken om een C++-extensie voor foutopsporingsprogramma's te bouwen en hoe u andere gegevensmodelconstructies (bijvoorbeeld JavaScript of NatVis) gebruikt vanuit een C++-gegevensmodelextensie.
Overzicht Foutopsporingsprogramma voor gegevensmodel C++
Foutopsporingsprogramma-gegevensmodel C++ interfaces
Gegevensmodel C++-objecten voor foutopsporingsprogramma's