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

  1. 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.

  2. Verwenden Sie in der Declare-Anweisung je nach Bedarf UInteger, ULong, UShort oder Byte für jeden Parameter mit einem Typ ohne Vorzeichen.

  3. 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.

  4. Deklarieren Sie die erforderlichen Konstanten im Code. Viele Windows-Konstanten sind 32-Bit-Werte ohne Vorzeichen, und Sie sollten diese als As UInteger deklarieren.

  5. 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 und SByte 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.

Siehe auch