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

Wenn Sie eine Klasse, ein Modul oder eine Struktur mit Elementen von nicht signierten ganzzahligen Typen verwenden, können Sie mit Visual Basic auf diese Member zugreifen.

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

  1. Verwenden Sie eine Declare-Anweisung, um Visual Basic zu informieren, welche Bibliothek die Funktion enthält, was sich der Name in dieser Bibliothek befindet, was seine Aufrufsequenz ist, und wie Zeichenfolgen beim Aufrufen konvertiert werden.

  2. Verwenden Sie in der Declare Anweisung , ULongUShortoder Byte je nach Bedarf für jeden Parameter mit einem nicht signierten UIntegerTyp.

  3. Lesen Sie die Dokumentation für die Windows-Funktion, die Sie aufrufen, um die Namen und Werte der von ihnen verwendeten Konstanten zu finden. Viele dieser Elemente sind in der WinUser.h-Datei definiert.

  4. Deklarieren Sie die erforderlichen Konstanten in Ihrem Code. Viele Windows Konstanten sind 32-Bit-Unsignierte Werte, und Sie sollten diese As UIntegerdeklarieren.

  5. Rufen Sie die Funktion auf normale Weise auf. Im folgenden Beispiel wird die funktion Windows MessageBoxaufgerufen, die ein nicht signiertes ganzzahliges Argument verwendet.

    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 UIntegerTypen "UShortLanguage Independence" und SByte "Language-Independent Components (CLS) sind nicht Teil der Sprachunabhängigkeit und Language-Independent Komponenten( CLS), sodass CLS-kompatibler Code keine Komponente nutzen kann, die sie ULongverwendet.

    Wichtig

    Durch den Aufruf von nicht verwaltetem Code, z. B. die Windows Anwendungsprogrammierungsschnittstelle (API), wird Ihr Code potenziellen Sicherheitsrisiken ausgesetzt.

    Wichtig

    Beim Aufrufen der Windows-API sind nicht verwaltete Codeberechtigungen erforderlich, die sich auf die Ausführung in teilvertrauenswürdigen Situationen auswirken können. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.

Weitere Informationen