Geralds Thought Shed

Gedanken zu .Net, C#, Java, Windows, Linux und mehr….

p/invoke Add-in für Visual Studio

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 | Getaggt: , | Keine Kommentare »

C# - Win32 API calls in C# ?!?!

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:

  1. Wir machen unsere Funktion ausfindig. Z.B. die Methode den um die Workstation, also unsere aktuelle Windows-Sitzung zu sperren.
  2. Die MSDN-Library sagt hierzu, dass wir die Methode LockWorkStation aus der user32.dll-Datei brauchen.
  3. 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();
  4. Das ist auch schon alles.
     

Viel Spass!

Veröffentlicht in .NET | Getaggt: , , , | 1 Kommentar »