Wer des öfteren Gebrauch von P/Invoke macht hat sich bestimmt schon das ein oder andere mal ein Werkzeug gewünscht, welches die diversen Typen, Konstanten und Prozeduren der win32-API zeigt. Bislang gab es eigentlich nur die Seite PInvoke.NET sowie deren Visual Studio Add-In. Da es aber genug Leute gibt die nur die Visual Studio Express Editions verwenden, welche ja bekanntlich keine Add-In's erlauben, blieb bis Dato nur die Seite PInvoke.NET oder eben die mühsame Suche im Internet.

Mit dem P/Invoke Interop Assistant hat nun Microsoft ein genau solches Werkzeug auf CodePlex zur Verfügung gestellt. Der Toolkit beinhaltet die Konsolenanwendungen sigimp.exe zur Konvertierung von nicht verwalteten in verwalteten Code und sigexp.exe zur Konvertierung von verwalteten in nicht verwalteten C Code. Die interessanteste Anwendung dürfte jedoch die GUI-Anwendung winsiggen.exe sein. Sie zeigt im Reiter SigImpSearch die verschiedenen win32-API Prozeduren, Typen und Strukturen in einer Tabelle an. In einer DDL kann die Auswahl auf einen bestimmten Typ, z.B.: Prozeduren, eingeschränkt werden. Wer den Namen der Prozedur kennt, kann in der Textbox Name den Namen eingeben. Während der Eingabe wird die Auswahl in der Tabelle bereits verfeinert. Jetzt braucht nur noch die benötigte Prozedur ausgewählt zu werden und mit einem Klick auf die Schaltfläche Generate wird im rechten Code-Fenster eine komplette Klasse NativeMethods sowie evtl. benötigte Strukturen in der ausgewählten Sprache erzeugt. Per copy paste braucht der erzeugte Code nun nur noch in eine Klassen-Datei eingefügt zu werden und die Arbeit ist getan. Beim erzeugen des verwalteten Code werden auch gleich die passenden InAttribute und OutAttribute gesetzt. Das Marshalling in den entsprechenden unmanaged Typ wird ebenfalls vom P/Invoke Interop Assistant übernommen.

PInvoke Interop Assistant

Einfacher geht es wirklich nicht, oder?

Die beiden Entwickler des P/Invove Interop Assistant, Yi Zhang und Xiaoying Guo, haben im MSDN Magazin einen sehr guten Artikel zum Marshalling zwischen verwaltetem und nicht verwaltetem Code veröffentlicht. Dieser Artikel zeigt auf verständliche Art die Grundlagen des Marshalling und stellt somit einiges an Hintergrundinformationen zum P/Invoke Interop Assistant zur Verfügung.

Was ich mir in der Anwendung noch wünschen würde ist zum einen: eine Verknüpfung zur Dokumentation der jeweiligen Funktion in der MSDN; und zum anderen eine einfache Möglichkeit die vorhandene windows.xml, die als Datenbasis für die win32-API verwendet wird, um eigene oder nicht beachtete Einträge zu erweitern.

 

Technorati-Tags:  | 
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
kick it on dotnet-kicks.de