DECLARE |
Déclare |
---|---|
Visual Basic |
Syntaxe
[Public | Private ] Declare Sub name Lib "libname" [Alias "aliasname" ][([arglist])] |
[Public | Private ] Declare Function name Lib "libname" [Alias "aliasname" ] [([arglist])][As type] |
Paramètres
Nom | Description |
---|---|
aliasname | Ce paramètre permet d'indiquer le nom de la procédure dans la DLL. Si le premier caractère n'est pas un #, aliasname est le nom du point d'entrée de la procédure dans la DLL. Si # est le premier caractère, tous les caractères suivant doivent indiquer le numéro ordinal du point d'entrée de la procédure. |
arglist | Ce paramètre permet d'indiquer la liste des variables représentant les paramètres passés à la procédure lors de son appel. |
libname | Ce paramètre permet d'indiquer le nom de la DLL contenant la procédure déclarée. |
name | Ce paramètre permet d'indiquer tout nom de procédure valide. |
type | Ce paramètre permet d'indiquer le type de données de la valeur renvoyée par une procédure Function; peut être Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (longueur variable uniquement), Object, Variant, un type défini par l'utilisateur ou un type d'objet. |
Alias | Ce paramètre permet d'indiquer que la procédure appelée a un autre nom dans la DLL. Ceci est utile lorsque le nom de la procédure externe est le même qu'un mot-clef. Vous pouvez également utiliser Alias lorsqu'une procédure DLL porte le même nom qu'une variable ou constante publique ou toute autre procédure dans la même portée. L'alias est également utile si des caractères dans le nom de la procédure DLL ne sont pas autorisés par la convention de dénomination DLL. |
Lib | Ce paramètre permet d'indiquer qu'une DLL contient la procédure déclarée. La clause Lib est requise pour toutes les déclarations. |
Private | Ce paramètre permet d'indiquer une déclaration privé. Utilisé pour déclarer des procédures n'étant disponibles que dans le module où la déclaration est faite. |
Public | Ce paramètre permet d'indiquer une déclaration publique. Utilisé pour déclarer les procédures disponibles pour toutes les autres procédures dans tous les modules. |
Sub | Ce paramètre permet d'indiquer que la procédure ne renvoie pas de valeur. |
Function | Ce paramètre permet d'indiquer que la procédure renvoie une valeur pouvant être utilisée dans une expression. |
Description
Cette instruction permet de de déclarer des références à des procédures externes dans une bibliothèque de liens dynamiques (DLL).
Remarques
- Le paramètre arglist a la syntaxe suivantes :
- Pour les procédures Function, le type de données de la procédure détermine le type de données qu'elle renvoie. Vous pouvez utiliser une clause As après le arglist pour spécifier le type de retour de la fonction. Dans arglist, vous pouvez utiliser une clause As pour spécifier le type de données de l'un des paramètres passés à la procédure. En plus de spécifier l'un des types de données standard, vous pouvez spécifier As Any dans le arglist pour empêcher la vérification de type et permettre à tout type de données d'être transmis à la procédure.
- Les parenthèses vides indiquent que la procédure Sub ou Function n'a aucun paramètre et que Visual Basic doit s'assurer qu'aucun n'est passé. Dans l'exemple suivant, First ne prend aucun paramètre. Si vous utilisez des paramètres dans un appel à First, une erreur se produit :
- Si vous incluez une liste de paramètres, le nombre et le type de paramètres sont vérifiés chaque fois que la procédure est appelée. Dans l'exemple suivant, First prend un paramètre Long :
- Vous ne pouvez pas avoir de chaînes de caractères de longueur fixe dans la liste de paramètres d'une instruction Declare. Seules les chaînes de caractères de longueur variable peuvent être passées aux procédures. Les chaînes de caractères de longueur fixe peuvent apparaître comme paramètres de procédure, mais elles sont converties en chaînes de caractères de longueur variable avant d'être transmises.
- Une constante, vbNullString, est fournie par Visual Basic pour une utilisation lors de l'appel de procédures externes, où la procédure externe nécessite une chaîne de caractères dont la valeur est zéro. Ce n'est pas la même chose qu'une chaîne de caractères de longueur 0 ("").
- Dans la version 32 bits de Windows, les noms de procédure de bibliothèque de liens dynamiques (DLL) sont sensibles à la casse; ceux de la version 16 bits de Windows (3.1 et versions antérieures) ne le sont pas.
- Dans certains cas, un seul paramètre d'une fonction d'API peut accepter l'un des différents types de données comme paramètres. Ceci est particulièrement courant lorsqu'une fonction accepte un pointeur vers un tampon de chaîne de caractères si un paramètre doit être fourni et un pointeur nul si ce n'est pas le cas; le premier est exprimé en Visual Basic par un paramètre de chaîne et le second par un 0 passé à la fonction par valeur. C'est également le cas chaque fois qu'une fonction API désigne le type de données d'un paramètre comme LPVOID, ce qui indique un pointeur vers n'importe quel type de données. Pour gérer cela, vous pouvez définir des versions distinctes de l'instruction DECLARE, une pour chaque type de données à transmettre à la fonction. (Dans ce cas, nom désigne le nom par lequel une fonction API particulière est référencée dans votre programme, tandis que la clause ALIAS désigne le nom de la routine tel qu'il existe dans la DLL.) Une deuxième alternative, plutôt que d'avoir à «taper fortement» un paramètre dans arglist, consiste à désigner son type de données comme As Any, indiquant que la routine accepte un paramètre de n'importe quel type de données. Bien que cela vous offre un moyen flexible de surmonter partiellement la non-concordance entre les types de données Visual Basic et C, vous devez l'utiliser avec prudence, car il suspend la vérification de type normal de Visual Basic pour ce paramètre.
- Le système d'exploitation Windows NT a été construit à partir de zéro en utilisant des chaînes Unicode (deux octets); cependant, il prend également en charge les chaînes de caractères ANSI. Le OLE 2.0 a été conçu pour utiliser exclusivement des chaînes de caractères Unicode. Le Visual Basic à partir de la version 4 utilise des chaînes de caractères Unicode en interne, mais transmet des chaînes de caractères ANSI dans votre programme. Ainsi, les appels d'API de Windows NT et OLE 2.0 ayant des paramètres de chaîne de caractères nécessitent qu'ils soient passés en tant que chaînes de caractères Unicode. Malheureusement, bien que Visual Basic utilise des chaînes de caractères Unicode en interne, il convertit les chaînes de caractères passées à ces DLL en ANSI. Le remède consiste à utiliser un tableau dynamique de type Byte. La transmission et la réception de tableaux d'octets évitent la conversion Unicode-ANSI de Visual Basic.
[Optional][ByVal | ByRef][ParamArray] varname[( )][As type] |
et voici ses parties :
Partie | Description |
---|---|
varname | Ce paramètre permet d'indiquer que le nom de la variable représentant le paramètre passé à la procédure; suit les conventions de dénomination des variables standard. |
type | Ce paramètre permet d'indiquer un type de données de paramètre passé à la procédure; peut être Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (longueur variable uniquement), Object, Variant, un type défini par l'utilisateur ou un type d'objet. |
ByRef | Ce paramètre permet d'indiquer que le paramètre est passé par référence. |
ByVal | Ce paramètre permet d'indiquer que le paramètre est passé par valeur. |
Optional | Ce paramètre permet d'indiquer qu'un paramètre n'est pas requis. S'il est utilisé, tous les paramètres suivants dans arglist doivent également être facultatifs et déclarés à l'aide du mot clef facultatif. Tous les paramètres facultatifs doivent être Variant. Facultatif ne peut être utilisé pour aucun paramètre si ParamArray est utilisé. |
ParamArray | Ce paramètre permet d'indiquer qu'il faut utilisé uniquement comme dernier paramètre dans arglist pour indiquer que le paramètre final est un tableau facultatif d'éléments Variant. Le mot clef ParamArray vous permet de fournir un nombre arbitraire de paramètre. Ne peut pas être utilisé avec ByVal, ByRef ou Optional. |
Declare Sub First Lib "MyLib" ()
Declare Sub First Lib "MyLib" (X As Long)
Dernière mise à jour : Mercredi, le 30 Décembre 2020