Comment : appeler une fonction Windows qui possède des types non signés (Visual Basic)
Si vous consommez une classe, un module ou une structure composé de membres de types entiers non signés, vous pouvez accéder à ces membres avec Visual Basic.
Pour appeler une fonction Windows qui utilise un type non signé
Utilisez une instruction Définir pour indiquer à Visual Basic la bibliothèque contenant la fonction, son nom dans cette bibliothèque, sa séquence appelante et comment convertir des chaînes lors de l’appel.
Dans l’instruction
Declare
, utilisezUInteger
,ULong
,UShort
ouByte
selon le cas pour chaque paramètre avec un type non signé.Consultez la documentation de la fonction Windows que vous appelez pour trouver les noms et les valeurs des constantes utilisées. La plupart d’entre elles sont définies dans le fichier WinUser.h.
Définissez les constantes nécessaires dans votre code. De nombreuses constantes Windows correspondent à des valeurs non signées 32 bits, et vous devez définir ces
As UInteger
.Appelez la fonction de manière habituelle. L’exemple suivant appelle la fonction Windows
MessageBox
, prenant un argument entier non signé.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
Vous pouvez tester la classe
messageThroughWindows
à l’aide du code suivant.Public Sub consumeWindowsMessage() Dim w As New windowsMessage w.messageThroughWindows() End Sub
Attention
Les types de données
UInteger
,ULong
,UShort
etSByte
ne font pas partie de l’Indépendance linguistique et composants indépendants de la langue (CLS ), de sorte que le code conforme CLS ne peut pas consommer un composant qui les utilise.Important
L’appel à du code non managé, tel que l’interface de programmation d’applications (API) Windows, expose votre code à des risques de sécurité potentiels.
Important
L’appel de l’API Windows nécessite une autorisation de code non managé, pouvant affecter son exécution dans des situations de confiance partielle. Pour plus d’informations, consultez SecurityPermission et Autorisations d'accès au code.