PROCÉDURE : Obtenir l'adresse d'une variable dans Visual Basic

Traductions disponibles Traductions disponibles
Numéro d'article: 199824 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F199824
Agrandir tout | Réduire tout

Sommaire

Résumé

Il est rare qu'un programmeur Visual Basic doive obtenir des informations de bas niveau sur une variable, telles que son adresse mémoire. Toutefois, certaines fonctions API requièrent ce type d'informations. Cet article décrit les fonctions Visual Basic qui peuvent aider un programmeur Visual Basic à obtenir ces informations :

VarPtr - Renvoie l'adresse d'une variable.

VarPtrArray - Renvoie l'adresse d'un tableau.

StrPtr - Renvoie l'adresse du tampon de chaîne UNICODE.

VarPtrStringArray - Renvoie l'adresse d'un tableau de chaînes.

ObjPtr - Renvoie le pointeur vers l'interface référencée par une variable objet.

Plus d'informations

AVERTISSEMENT : Une ou plusieurs des fonctions suivantes sont décrites dans cet article : VarPtr, VarPtrArray, VarPtrStringArray, StrPtr et ObjPtr. Le Support technique Microsoft ne les prend pas en charge. Elles ne sont pas traitées dans la documentation Visual Basic et sont présentées dans cet article de la Base de connaissances Microsoft " en l'état ". Microsoft ne garantit pas que ces fonctions seront disponibles dans les versions ultérieures de Visual Basic.

VarPtr

Cette fonction peut être utilisée pour obtenir l'adresse d'une variable ou d'un élément de tableau. Elle utilise le nom de la variable ou l'élément de tableau comme paramètre, et renvoie son adresse. Toutefois, sachez que Visual Basic peut réattribuer des tableaux dynamiques non verrouillés, et vous devez par conséquent faire particulièrement attention lors de l'utilisation de VarPtr pour obtenir l'adresse d'un élément de tableau.

L'exemple suivant obtient l'adresse d'une variable :

Dim lngVariableAddress as Long
Dim dblMyVariable as Double
lngVariableAddress = VarPtr(dblMyVariable)

L'exemple ci-dessous obtient l'adresse du quatrième élément d'un tableau :

Dim lngElementAddress as Long
Dim lngArrayOfLongs(9) as Long
' le code suivant obtiendra l'adresse du 4ème élément
lngElementAddress = VarPtr(lngArrayOfLongs(3))

Restrictions : La fonction VarPtr ne peut pas être utilisée pour obtenir l'adresse d'un tableau. Pour plus d'informations, consultez les informations relatives à la fonction VarPtrArray.

VarPtrArray

Dans Visual Basic, les tableaux sont stockés en tant que SAFEARRAY. Pour obtenir l'adresse de la structure SAFEARRAY, vous devez utiliser la fonction VarPtrArray. Les exemples ci-dessous illustrent les déclarations appropriées dans Visual Basic 5.0 et dans Visual Basic 6.0, respectivement :

Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" _
(Var() as Any) As Long

Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" _
(Var() as Any) As Long

Pour obtenir l'adresse d'un SAFEARRAY, passez le nom du SAFEARRAY (parenthèses incluses) à la fonction VarPtrArray :

Dim lngSafeArrayAddress as Long
Dim lngArrayOfLongs(9) as Long
lngSafeArrayAddress = VarPtrArray(lngArrayOfLongs())

Restrictions : La fonction VarPtrArray ne peut pas être utilisée pour obtenir l'adresse d'un tableau de chaînes, parce que Visual Basic utilise la conversion UNICODE/ANSI pour les chaînes. Si vous utilisez VarPtrArray sur un tableau de chaînes, vous obtiendrez l'adresse d'une copie ANSI temporaire du tableau. Pour plus d'informations, consultez les informations relatives à la fonction VarPtrStringArray.

StrPtr

Dans Visual Basic, les chaînes sont stockées en tant que BSTR. Si vous utilisez la fonction VarPtr sur une variable de type String (chaîne), vous obtiendrez l'adresse du BSTR, qui est un pointeur vers un pointeur de la chaîne. Pour obtenir l'adresse du tampon de chaîne lui-même, vous devez utiliser la fonction StrPtr. Cette fonction renvoie l'adresse du premier caractère de la chaîne. Tenez compte du fait que les chaînes sont stockées en tant que chaînes UNICODE dans Visual Basic.

Pour obtenir l'adresse du premier caractère d'une chaîne, passez la variable String à la fonction StrPtr.

Exemple :

Dim lngCharAddress as Long
Dim strMyVariable as String
strMyVariable = "Une chaîne"
lngCharAddress = StrPtr(strMyVariable)

Vous pouvez utiliser cette fonction lorsque vous devez passer un pointeur à une chaîne UNICODE dans un appel API.

VarPtrStringArray

VarPtrStringArray renvoie l'adresse d'un tableau de chaînes. Afin d'éviter la conversion intrinsèque UNICODE/ANSI effectuée par Visual Basic, vous devez définir la déclaration dans une bibliothèque de types.

Vous pouvez également utiliser le compilateur MIDL pour compiler votre propre bibliothèque de types à partir des fichiers .odl suivants.

Pour Visual Basic 6.0, créez un fichier texte nommé VB6ptrlib.odl ayant le contenu suivant :

#define RTCALL _stdcall
[
uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),
lcid (0), version(6.0), helpstring("VarPtrStringArray Support for VB6")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm60.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}

Pour Visual Basic 5.0, créez un fichier texte nommé VB5ptrlib.odl ayant le contenu suivant :

#define RTCALL _stdcall
[
uuid(6E814F00-7439-11D2-98D2-00C04FAD90E7),
lcid (0), version(5.0), helpstring("VarPtrStringArray Support for VB5")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm50.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}

Utilisez les lignes de commande suivantes pour compiler les fichiers .odl ci-dessus à l'aide du compilateur MIDL afin de créer un fichier de bibliothèque de types (.tlb) Visual Basic 6.0 ou Visual Basic 5.0 :

MIDL /t VB6ptrlib.odl MIDL /t VB5ptrlib.odl

Pour utiliser la fonction VarPtrStringArray dans votre projet, vous devez créer une référence à la bibliothèque de types que vous venez de créer.

Exemple :

Dim MyArrayOfStrings(2) As String
Dim AddressOfArray As Long
MyArrayOfStrings(0)="AAA"
MyArrayOfStrings(1)="BBB"
AddressOfArray = VarPtrStringArray ( MyArrayOfStrings() )

ObjPtr

ObjPtr utilise le nom d'une variable objet comme paramètre et obtient l'adresse de l'interface référencée par cette variable objet.

Cette fonction est notamment utilisée pour la création d'une collection d'objets. Si vous indexez l'objet en utilisant son adresse comme clé, vous pouvez accéder plus rapidement à l'objet qu'en parcourant la collection à l'aide de l'opérateur Is. Dans de nombreux cas, l'adresse d'un objet est le seul élément fiable pouvant être utilisé comme clé.

Exemple :

objCollection.Add MyObj1, CStr(ObjPtr(MyObj1))
...
objCollection.Remove CStr(ObjPtr(MyObj1))

Propriétés

Numéro d'article: 199824 - Dernière mise à jour: mercredi 15 octobre 2003 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 6.0 Édition initiation
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic 6.0 Édition Entreprise
Mots-clés : 
kbhowto kbvbp kbvbp500 kbvbp600 kbgrpdsvb KB199824
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com