Verfasst von Gerald Huber am Montag, 28. Januar 2008
Am Anfang dieses Monats habe ich über Win 32-Api-Calls in C#-Anwendungen geschrieben. Ich beschrieb wie ich diese Funktionen mittels DllImport usw. aufrufen und benutzen kann.
Die Schwiereigkeit dabei ist, die geeigneten Datentypen oder überhaupt die richtige DLL-Datei zu finden. Hier schafft die Seite http://pinvoke.net/ Abhilfe.
Die Seite selbst beschreibt sich: „A wiki for .NET developers: PInvoke.net is primarily a wiki, allowing developers to find, edit and add PInvoke signatures, user-defined types, and any other information related to calling Win32 and other unmanaged APIs from managed code (written in languages such as C# or VB.NET).“
Das ist schonmal gut. Aber besser ist noch, dass die Community um PInvoke ein Add-in für Visual Studio bereitstellt um direkt auf den Inhalt von Pinvoke zuzugreifen: Download the PInvoke.net Add-in for FREE now.
Einfacher geht es nur, wenn wir Win32-Api-Calls nie mehr benutzen müssten…
Veröffentlicht in .NET, Visual Studio | Verschlagwortet mit : p/invoke, Visual Studio | Kommentar schreiben »
Verfasst von Gerald Huber am Montag, 7. Januar 2008
Wieder einmal eine Frage, die sich der ein oder andere sicherlich schon mal gestellt hat, was ist, wenn der Befehl/die Funktion die ich brauche nicht in der .NET-Library enthalten ist? – Klar, momentan gibt es (so gut wie .NET 3.5) aber es ist immer noch nicht alles von Windows „gewrappt“ worden.
Kann man also unter (innerhalb) von C# Win32-Api-Methoden aufrufen? – JA.
Und zwar so:
-
Wir machen unsere Funktion ausfindig. Z.B. die Methode den um die Workstation, also unsere aktuelle Windows-Sitzung zu sperren.
-
Die MSDN-Library sagt hierzu, dass wir die Methode LockWorkStation aus der user32.dll-Datei brauchen.
-
Nun schreiben wir in unsere C#-Klasse folgende Zeilen:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
Hierbei Importieren wir die „user32.dll“ mittels „DllImport“ und müssen natürlich die Methode als „extern“ definieren, da sie ja aus dieser DLL-Datei importiert wird.
„SetLastError=true“ sagt nur, dass wir eine Fehlermeldung der Importierten Methode auslesen könnten.Anmerkung: Hätten wir zu dem DllImport-Attribute noch “ EntryPoint=“LockWorkStation“ “ geschrieben hätten wir unsere Methode anders benennen können, also z.B. wie folgt:
[DllImport("user32.dll", EntryPoint="LockWorkStation", SetLastError = true)]
public static extern bool Lock();
-
Das ist auch schon alles.
Viel Spass!
Veröffentlicht in .NET | Verschlagwortet mit : .NET, C#, DllImport, p/invoke | 1 Kommentar »