Freigeben über


Vorgehensweise: Aufrufen einer Windows-Funktion, die nicht signierte Typen verwendet (Visual Basic)

Wenn Sie eine Klasse, ein Modul oder eine Struktur verwenden, die Elemente nicht signierter ganzzahliger Typen enthält, 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 mitzuteilen, welche Bibliothek die Funktion enthält, wie sie in dieser Bibliothek heißt, wie ihre Aufrufsequenz ist, und wie Zeichenfolgen beim Aufrufen konvertiert werden.

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

  3. In der Dokumentation für die Windows-Funktion, die Sie aufrufen, finden Sie die Namen und Werte der von ihr verwendeten Konstanten. Viele davon 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 UIntegerdeklarieren.

  5. Rufen Sie die Funktion normal auf. Im folgenden Beispiel wird die Windows-Funktion 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
    

    Vorsicht

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

    Von Bedeutung

    Wenn Sie einen Aufruf an nicht verwalteten Code ausführen, z. B. die Windows-API (Application Programming Interface), setzt Ihren Code potenziellen Sicherheitsrisiken aus.

    Von Bedeutung

    Das Aufrufen der Windows-API erfordert nicht verwaltete Codeberechtigungen, die sich auf die Ausführung in teilweise vertrauenswürdigen Situationen auswirken können. Weitere Informationen finden Sie unter SecurityPermission und Berechtigungen für den Codezugriff.

Siehe auch