.
Anmeldung | Registrieren | Hilfe | Posteingang
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

Win32 API in VB.NET

Dieser Artikel beschreibt die Verwendung

von Win32 APIs in VB.NET Anwendungen.

 

Das .NET Framework ist zwar riesig,

deckt trotzdem nicht alle Funktionen ab.

Vor allem nicht die Funktionen die meistens

von Win32 APIs erledigt werden.

 

Praktisches Beispiel die HotKey API.

Mit dieser API kann man Globale Tastenkombinationen

sogenannte HotKeys registrieren um diese

überall abzufangen um dann ein entsprechendes

Ereignis im Programm zu starten.

 

In VB6 wurden die dafür benötigten APIs wie

folgt deklariert (eine API als Beispiel):

 

Private Declare Function RegisterHotKey Lib "user32" ( _

    ByVal hWnd As Long, _

    ByVal ID As Long, _

    ByVal fsModifiers As Long, _

    ByVal vk As Long)

As Long

 

In VB.NET sieht das aber ein klein wenig anders aus,

diese veränderung sind aber dringend notwendig da es sonst

zu einem Programmabsturz kommen kann:

 

Private Declare Function RegisterHotKey Lib "user32" ( _

    ByVal Hwnd As IntPtr, _

    ByVal ID As Integer, _

    ByVal Modifiers As Integer, _

    ByVal Key As Integer) _

As Integer

 

Wie man sieht wurde der Datentyp vom

Parameter "hWnd" von Long nach IntPtr geändert.

IntPtr ist eine einfach Struktur in der

man entweder ein 32 Bit Wert oder einen

64 Bit Wert speichern kann und wird

in VB.NET für sogenannte Handles verwendet.

 

Alle anderen Datentypen wurden von

Long nach Integer geändert.

Das ist auch eines der wichtigsten Veränderungen.

In VB6 war der Datentyp Long nur 32 Bit lang,

deshalb muss man in VB.NET den Datentyp

Integer verwenden da dieser dort auch 32 Bit

lang ist, der Long Datentyp in VB.NET ist jedoch

64 Bit lang und das ist zuviel für die API.

 

Aber das war noch nicht alles.

Man kann einer API oder auch einer (unmanaged)DLL

Deklaration noch einige Paramter für den Aufruf

einer DLL vom Framework aus mitgeben.

Dann sieht eine Deklaration ganz anders aus,

nämlich wie eine ganz normale Funktion

(Der Namespace "System.Runtime.InteropServices"

muss vorher importiert werden):

 

<DllImport("user32.dll")> _

Public Shared Function RegisterHotKey( _

    ByVal Hwnd As IntPtr, _

    ByVal ID As Integer, _

    ByVal Modifiers As Integer, _

    ByVal Key As Integer) As Integer

End Function

 

Wie man sehen kann heißt die zusätzliche

Funktion über der Deklaration "DllImport"

und hat noch 8 weitere optionale Parameter.

Hier sieht man einen Aufruf mit

2 von 8 optionalen Parametern:

 

<DllImport("custom.dll", EntryPoint:="Einstiegspunkt", CharSet:=CharSet.Auto)> _

Public Shared Function MeineFunktion(Byval Param1 As Integer)

 

End Function

 

Der Paramter "EntryPoint" bestimmt einen

Alternativen Einstiegspunkt.

Bei VB6 wurde dafür immer "Alias" genommen.

Alias wird aber immer noch unterstütz.

 

Mit dem Paramter "CharSet" kann man festlegen

mit welchen Zeichensatz Strings gemarshallt werden sollen.

 

Es gibt noch 6 weitere Parameter:

BestFitMapping(Boolean)

CallingConvention(CallingConvention)

ExactSpelling(Boolean)

PreserveSig(Boolean)

SetLastError(Boolean)

ThrowOnUnmappableChar(Boolean)

 

Für weitere Informationen und Beschreibungen siehe MSDN.

 

Sie können entweder weiterhin im VB6 Stil

die APIs mit angepassten Datentypen deklarieren

oder im .NET Stil. Umsteiger werden meistens

noch eine weile beim alten Stil bleiben

aber das bleibt jedem selbst überlassen.

von Tim Hartwig, 08.06.2008 zugeordnet zu Cliententwicklung , Visual Basic .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Fortgeschrittene
  • Views: 1884
  • Zur Druckversion
  • Artikel von Tim Hartwig

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum