Como chamar uma função do Windows que use tipos não assinados (Visual Basic)

Se você estiver consumindo uma classe, módulo ou estrutura que tenha membros de tipos inteiros não assinados, você poderá acessar esses membros com o Visual Basic.

Para chamar uma função do Windows que use um tipo não assinado

  1. Use uma Instrução Declare para informar ao Visual Basic qual biblioteca contém a função, qual é o nome dela nessa biblioteca, qual é a sequência de chamadas e como converter cadeias de caracteres ao chamá-la.

  2. Na instrução Declare, use UInteger, ULong, UShort ou Byte conforme apropriado para cada parâmetro com um tipo não assinado.

  3. Consulte a documentação da função do Windows que você está chamando para encontrar os nomes e valores das constantes que ela usa. Muitos deles são definidos no arquivo WinUser.h.

  4. Declare as constantes necessárias no seu código. Muitas constantes do Windows são valores não assinados de 32 bits e você deve declará-los As UInteger.

  5. Chame a função da maneira normal. O exemplo a seguir chama a função MessageBox do Windows, que usa um argumento inteiro sem sinal.

    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
    

    Você pode testar a função messageThroughWindows com o código a seguir.

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

    Cuidado

    Os tipos de dados UInteger, ULong, UShort e SByte não fazem parte do CLS (Independência de Linguagem e Componentes Independentes de Linguagem), portanto, o código compatível com CLS não pode consumir um componente que os usa.

    Importante

    Fazer uma chamada para código não gerenciado, como a API (interface de programação de aplicativo) do Windows, expõe seu código a possíveis riscos de segurança.

    Importante

    Chamar a API do Windows requer permissão de código não gerenciada, o que pode afetar a execução dela em situações de confiança parcial. Para obter mais informações, consulte SecurityPermission e Permissões de Acesso de Código.

Confira também