Procedura: chiamare una funzione Windows che accetta tipi senza segno (Visual Basic)
Se si utilizza una classe, un modulo o una struttura con membri di tipo intero senza segno, è possibile accedere a questi membri con Visual Basic.
Chiamare una funzione Windows che accetta tipi senza segno
Utilizzare un'istruzione Declare per indicare a Visual Basic quale libreria contiene la funzione, qual è il nome della libreria, qual è la sequenza chiamante e come convertire le stringhe durante la chiamata.
Nell'istruzione
Declare
usareUInteger
,ULong
,UShort
oByte
, secondo come appropriato per ogni parametro con un tipo senza segno.Consultare la documentazione relativa alla funzione di Windows che si sta chiamando per trovare i nomi e i valori delle costanti usate. A questo riguardo, molte definizioni si trovano nel file WinUser.h.
Dichiarare le costanti necessarie nel codice. Molte costanti di Windows sono valori senza segno a 32 bit ed è necessario dichiarare questi
As UInteger
.Chiamare la funzione in modo normale. Nell'esempio seguente viene chiamata la funzione Windows
MessageBox
, che accetta un argomento intero senza segno.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
È possibile testare la funzione
messageThroughWindows
con il codice seguente.Public Sub consumeWindowsMessage() Dim w As New windowsMessage w.messageThroughWindows() End Sub
Attenzione
I tipi di dati
UInteger
,ULong
,UShort
eSByte
non fanno parte di Indipendenza del linguaggio e componenti indipendenti dal linguaggio (CLS), quindi il codice conforme a CLS non può utilizzare un componente che li usa.Importante
L’esecuzione di una chiamata a codice non gestito, ad esempio l'API (Application Programming Interface) di Windows, espone il codice a potenziali rischi per la sicurezza.
Importante
La chiamata all'API Di Windows richiede l'autorizzazione del codice non gestito, che potrebbe influire sull'esecuzione in situazioni di attendibilità parziale. Per altre informazioni, vedere SecurityPermission e Autorizzazioni di accesso al codice.