Impossibile copiare il valore del parametro 'ByRef' '<nomeparametro>' nell'argomento corrispondente perché il tipo '<nometipo1>' non può essere convertito nel tipo '<nometipo2>'

Aggiornamento: novembre 2007

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

Una routine è stata dichiarata con un tipo di parametro che non è possibile convertire nuovamente nel tipo di argomento chiamante.

Quando viene definita una classe o struttura, è possibile definire uno o più operatori di conversione per convertire quel tipo di classe o struttura in altri tipi. È inoltre possibile definire operatori di conversione inversa per riconvertire gli altri tipi nel tipo di classe o struttura di origine. Quando si utilizza il tipo di classe o struttura in una chiamata di routine, Visual Basic può utilizzare questi operatori di conversione per convertire il tipo di un argomento nel tipo del parametro corrispondente.

Se si passa l'argomento ByRef, talvolta Visual Basic copia il valore dell'argomento in una variabile locale nella routine anziché passare un riferimento. In tal caso, al ritorno della routine Visual Basic deve ricopiare il valore della variabile locale nell'argomento del codice chiamante.

Se il valore di un argomento ByRef viene copiato nella routine e l'argomento e il parametro sono dello stesso tipo, non è necessario effettuare alcuna conversione, ma se i tipi sono diversi, Visual Basic deve effettuare una conversione in entrambe le direzioni. Se uno dei tipi corrisponde al tipo della classe o struttura, Visual Basic deve convertirlo da e verso l'altro tipo. Questo comporta la necessità di definire gli operatori di conversione in entrambe le direzioni.

ID errore: BC33037

Per correggere l'errore

  • Se possibile, utilizzare un argomento di chiamata dello stesso tipo del parametro di routine in modo che Visual Basic non debba effettuare alcuna conversione.

  • Se è necessario chiamare la routine con un tipo di argomento diverso dal tipo di parametro ma non è necessario che venga restituito un valore nell'argomento di chiamata, definire il parametro come ByVal anziché ByRef.

  • Se è necessario ottenere un valore nell'argomento di chiamata, definire l'operatore di conversione inversa in modo che in Visual Basic sia possibile eseguire nuovamente la conversione nel tipo di argomento di chiamata.

Vedere anche

Attività

Procedura: definire un operatore

Procedura: definire un operatore di conversione

Concetti

Routine in Visual Basic

Parametri e argomenti delle routine

Passaggio di argomenti per valore e per riferimento

Routine di operatore

Riferimenti

Istruzione Operator