Please activate JavaScript!
Please install Adobe Flash Player, click here for download

arcAKTUELL 1.2012 - Teilen und mitteilen - Karten in der Kommunikation

48 arcAK TUELL 1/2012 Verwendung von ProgIDs zur Instanziierung Type-unsafe Access Möchte man eine Instanz einer COM-Klasse über die ProgID erzeu- gen lassen, kommt oft ein Code-Konstrukt ähnlich diesem hier zur Verwendung: Problematisch ist der Zugriff über den String . Derartige Konstrukte sind nicht typsicher. Fehler hierbei, z.B. nach Refacto- rings oder durch Tippfehler, fallen erst zur Laufzeit auf. Type-safe Access Leider nur sehr selten publiziert, steht auch ein typsicheres Kon- strukt zur Verfügung: Hier erfolgt der Einstieg nicht mehr über einen String, sondern den Typen an sich. Zusammen mit dessen GUID und der überladenen String-Formatierung2 ergibt sich ein typsicherer Zugriff. Das „B“ steht übrigens für „Brackets“ und bezeichnet die Form, in der die GUID in einen String transformiert wird. > Tipp: Mittels Erweiterungsmethoden ließe sich dies auch noch vereinfachen. Umgang mit GUIDs Bei der Programmierung mit ArcObjects müssen viele eigene Arte- fakte mit GUIDs versehen werden. Zur Erzeugung einer neuen GUID bietet Visual Studio einen entsprechenden Menüpunkt an. Leider hat man so keinen Einfluss auf die Form der erzeugten GUID und in einem größeren Projekt befinden sich die eigenen Registry- relevanten Artefakte daher verteilt in der Registry wieder. Dies führt bei bestimmten Debugging- und Tracing-Prozessen zu viel Naviga- tion innerhalb bestimmter Schlüssel (bspw. HKLM\CLSID). Dem ein oder anderen Entwickler dürfte aufgefallen sein, dass ArcObject Klassen häufig aufeinanderfolgende Schlüssel-GUIDs ha- ben und somit semantisch gruppiert sind. Dies ist sehr praktisch, da man zum einen sofort sieht, welche weiteren Klassen interessante Kandidaten im jeweiligen Problemkontext sein könnten, und zum anderen die Navigation zwischen den Schlüsseln der Klassen deut- lich reduziert wird. Die Etablierung eines derartigen Ansatzes für eigene Projekte ist trivialer, als man denkt. Am einfachsten erzeugt man sich gleich zu Projektstart eine lange Liste von aufeinanderfolgenden GUIDs und dokumentiert deren Verwendung. Diese Liste sollte mit ins Projekt- Wiki oder -Repository aufgenommen werden. Jeder, der eine neue GUID benötigt, entnimmt sie aus dieser Liste und dokumentiert de- ren Verwendung. Somit hat man auch gleich den Testfall zur Veri- fikation der zu erzeugenden Schlüssel auf dem Zielsystem doku- mentiert. Die Liste selber kann natürlich auch schon vorab gruppiert werden, um semantische Gruppen zu bilden (Commands, Extensions, …). Als praktisch erwies sich, die GUIDs von COM-relevanten Testklas- sen von produktiven GUIDs zu trennen – z.B. durch Entnahme aus dem Ende der Liste. Zur Erzeugung der Liste nutze ich den Kruithof-GUID-Generator3 im Web. Mit diesem lassen sich maximal 500 GUIDs am Stück er- zeugen. > Tipp: Dieser Generator rotiert die Ziffern des ersten GUID-Blocks in ca. 15 Minuten durch. Wenn man ein bisschen geduldig ist, kann man so eine Liste von GUIDs erzeugen lassen, die beispielsweise mit Nullen beginnen. Per Hand sollte man die Blöcke keinesfalls mo- difizieren: Erstens, weil auch andere Personen auf derartige triviale Nummernfolgen kommen, und zweitens, weil der Aufbau einer GUID bestimmten Regeln folgt, die nicht auf Ziffern-Feng-Shui fußen. Diese GUIDs ste- hen am Anfang unterm CLSID- Schlüssel und kön- nen sofort ohne weitere Navigation analysiert werden. Dazu kann man in Regedit den CLSID- Schlüssel in die Favoriten aufnehmen oder auch die inkrementel- le Suche nutzen (HKCR selektieren und expandieren und die Buch- stabenfolge „cls“ schnell hintereinander eingeben reicht meistens schon für den Sprung zum Schlüssel CLSID; abschließend noch mit „Pfeil rechts“ den CLSID-Schlüssel expandieren und scrollen las- sen). ++ Marko Apfel Esri Deutschland GmbH Kranzberg 1 NuGet-Package-Management mit ArcObjects http://bit.ly/tawLH7 2 MSDN: Guid.ToString Method: http://bit.ly/t47SwA 3 GUID-Generator von Kruithof: http://bit.ly/rZTQak T I P P S U N D T R I C K S

Seitenübersicht