Gewusst wie: Aufrufen einer Windows-Funktion, die vorzeichenlose Typen akzeptiert (Visual Basic)

Wenn Sie eine Klasse, ein Modul oder eine Struktur verwenden, die Member von ganzzahligen Typen ohne Vorzeichen enthält, können Sie mit Visual Basic auf diese Member zugreifen.

So rufen Sie eine Windows Funktion auf, die einen nicht signierten Typ annimmt

  1. Verwenden Sie eine Declare-Anweisung, um Visual Basic mitzuteilen, welche Bibliothek die Funktion enthält, wie ihr Name in dieser Bibliothek ist, wie die aufrufende Sequenz ist und wie Zeichenfolgen beim Aufrufen konvertiert werden.

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

  3. Lesen Sie die Dokumentation für die Windows Funktion, die Sie aufrufen, um die Namen und Werte der verwendeten Konstanten zu finden. Viele dieser Dateien sind 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 As UInteger deklarieren.

  5. Rufen Sie die Funktion auf normale Weise auf. Im folgenden Beispiel wird die Windows Funktion , MessageBox die ein ganzzahliges Argument ohne Vorzeichen akzeptiert.

    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 Funktion messageThroughWindows mit dem folgenden Code testen.

    Public Sub consumeWindowsMessage()
        Dim w As New windowsMessage
        w.messageThroughWindows()
    End Sub
    

    Achtung

    Die UInteger ULong Datentypen , UShort , und sind nicht Teil der Language Independence and Language-Independent SByte Components (CLS), sodass CLS-kompatibler Code keine Komponente nutzen kann, die sie verwendet.

    Wichtig

    Das Aufrufen von nicht verwaltetem Code, z. B. die Windows Api (Application Programming Interface), macht Ihren Code potenziellen Sicherheitsrisiken ausgesetzt.

    Wichtig

    Das Aufrufen der Windows-API erfordert die Berechtigung für nicht verwalteten Code, was sich auf die Ausführung in Situationen mit teilweiser Vertrauenswürdigkeit auswirken kann. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.

Siehe auch