Partager via


Impossible de copier la valeur du paramètre 'ByRef' '<NomParamètre>' dans l'argument correspondant, car le type '<NomType1>' ne peut pas être converti en type '<NomType2>'

Mise à jour : novembre 2007

Cannot copy the value of 'ByRef' parameter '<parametername>' back to the matching argument because type '<typename1>' cannot be converted to type '<typename2>'

Une procédure est déclarée avec un type de paramètre qui ne peut pas être converti en type d'argument d'appel.

Lorsque vous définissez une classe ou une structure, vous pouvez définir un ou plusieurs opérateurs de conversion pour convertir ce type de classe ou de structure en d'autres types. Vous pouvez également définir des opérateurs de conversion inverse pour convertir ces autres types en votre type de classe ou de structure. Lorsque vous utilisez votre type de classe ou de structure dans un appel de procédure, Visual Basic peut utiliser ces opérateurs de conversion pour convertir le type d'un argument en type de son paramètre correspondant.

Si vous passez l'argument ByRef, Visual Basic copie parfois sa valeur dans une variable locale de la procédure au lieu de passer une référence. Dans ce cas, lors du retour de la procédure, Visual Basic doit copier la valeur de la variable locale dans l'argument du code appelant.

Si une valeur d'argument ByRef est copiée dans la procédure et que l'argument et le paramètre sont du même type, aucune conversion n'est nécessaire. Mais si les types sont différents, Visual Basic doit effectuer une conversion dans les deux sens. Si l'un des types est votre type de classe ou de structure, Visual Basic doit le convertir vers et à partir de l'autre type. Cela signifie que vous devez définir des opérateurs de conversion dans les deux sens.

ID d'erreur : BC33037

Pour corriger cette erreur

  • Si possible, utilisez un argument d'appel du même type que le paramètre de procédure. Ainsi, Visual Basic n'a pas besoin d'effectuer une conversion.

  • Si vous devez appeler la procédure avec un type d'argument autre que le type du paramètre, sans retourner une valeur dans l'argument d'appel, affectez au paramètre la valeur ByVal au lieu de ByRef.

  • Si vous devez retourner une valeur dans l'argument d'appel, définissez l'opérateur de conversion inverse afin que Visual Basic puisse convertir le type en type d'argument d'appel.

Voir aussi

Tâches

Comment : définir un opérateur

Comment : définir un opérateur de conversion

Concepts

Procédures dans Visual Basic

Paramètres et arguments d'une procédure

Passage d'arguments par valeur et par référence

Procédures d'opérateur

Référence

Operator, instruction