Gewusst wie: Aufrufen einer Windows-Funktion, die vorzeichenlose Typen akzeptiert (Visual Basic)
Wenn Sie eine Klasse, ein Modul oder eine Struktur verwenden, die bzw. das Member von Integertypen ohne Vorzeichen enthält, können Sie mit Visual Basic auf diese Member zugreifen.
So rufen Sie eine Windows-Funktion auf, die einen Typ ohne Vorzeichen verwendet
Verwenden Sie eine Declare-Anweisung, um Visual Basic mitzuteilen, welche Bibliothek die Funktion enthält, welchen Namen sie in dieser Bibliothek trägt, wie die Aufrufsequenz aussieht und wie Zeichenfolgen bei ihrem Aufruf konvertiert werden sollen.
Verwenden Sie in der
Declare
-Anweisung je nach BedarfUInteger
,ULong
,UShort
oderByte
für jeden Parameter mit einem Typ ohne Vorzeichen.Lesen Sie die Dokumentation für die Windows-Funktion, die Sie aufrufen, um die Namen und Werte der von ihr verwendeten Konstanten zu ermitteln. Viele von ihnen werden in der Datei „WinUser.h“ definiert.
Deklarieren Sie die erforderlichen Konstanten im Code. Viele Windows-Konstanten sind 32-Bit-Werte ohne Vorzeichen, und Sie sollten diese als
As UInteger
deklarieren.Rufen Sie die Funktion auf normale Weise auf. Im folgenden Beispiel wird die Windows-Funktion
MessageBox
aufgerufen, die ein Intergerargument ohne Vorzeichen annimmt.Public Class windowsMessage Private Declare Auto Function mb Lib "user32.dll" Alias "MessageBox" ( ByVal hWnd As Integer, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As UInteger) As Integer Private Const MB_OK As UInteger = 0 Private Const MB_ICONEXCLAMATION As UInteger = &H30 Private Const IDOK As UInteger = 1 Private Const IDCLOSE As UInteger = 8 Private Const c As UInteger = MB_OK Or MB_ICONEXCLAMATION Public Function messageThroughWindows() As String Dim r As Integer = mb(0, "Click OK if you see this!", "Windows API call", c) Dim s As String = "Windows API MessageBox returned " & CStr(r)& vbCrLf & "(IDOK = " & CStr(IDOK) & ", IDCLOSE = " & CStr(IDCLOSE) & ")" Return s End Function End Class
Sie können die
messageThroughWindows
-Funktion mit dem folgenden Code testen.Public Sub consumeWindowsMessage() Dim w As New windowsMessage w.messageThroughWindows() End Sub
Achtung
Die Datentypen
UInteger
,ULong
,UShort
undSByte
sind nicht Teil der CLS Language Independence and Language-Independent Components, sodass CLS-konformer Code eine Komponente, die diese Datentypen verwendet, nicht nutzen kann.Wichtig
Der Aufruf von nicht verwaltetem Code, z. B. der Windows-API (Anwendungsprogrammierschnittstelle, setzt Ihren Code potenziellen Sicherheitsrisiken aus.
Wichtig
Der Aufruf der Windows-API erfordert eine Berechtigung für nicht verwalteten Code, was die Ausführung in Situationen mit teilweiser Vertrauenswürdigkeit beeinträchtigen kann. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.