BC32053: Copiar o valor “<parametername>” do parâmetro 'ByRef' de volta para o argumento correspondente é restrita do tipo “<typename1>” para o tipo “<typename2>”

Um procedimento é chamado com um argumento que expande para o tipo de parâmetro correspondente e a conversão do parâmetro para o argumento é restrita.

Ao definir uma classe ou estrutura, você pode definir um ou mais operadores de conversão para converter esse tipo de classe ou estrutura em outros tipos. Você também pode definir operadores de conversão reversa para converter esses outros tipos de volta para sua classe ou tipo de estrutura. Quando você usa seu tipo de classe ou estrutura em uma chamada de procedimento, o Visual Basic pode usar esses operadores de conversão para converter o tipo de um argumento para o tipo de parâmetro correspondente.

Se você passar o argumento ByRef, o Visual Basic às vezes copia o valor do argumento em uma variável local no procedimento em vez de passar uma referência. Nesse caso, quando o procedimento retorna, o Visual Basic deve copiar o valor da variável local de volta para o argumento no código de chamada.

Se um valor de argumento ByRef for copiado no procedimento e o argumento e o parâmetro forem do mesmo tipo, nenhuma conversão será necessária. Mas se os tipos forem diferentes, o Visual Basic deverá converter em ambas as direções. Se um dos tipos for seu tipo de classe ou estrutura, o Visual Basic deverá fazer a conversão do outro tipo para o seu, e do seu tipo para o outro. Se uma dessas conversões for de expansão, a conversão inversa poderá ser de restrição.

ID do Erro: BC32053

Para corrigir este erro

  • Se possível, use um argumento de chamada do mesmo tipo que o parâmetro de procedimento, para que o Visual Basic não precise fazer nenhuma conversão.

  • Se você precisar chamar o procedimento com um tipo de argumento diferente do tipo de parâmetro, mas não precisar retornar um valor para o argumento de chamada, defina o parâmetro como ByVal em vez de ByRef.

  • Se você precisar retornar um valor para o argumento de chamada, defina o operador de conversão reversa como Expansão, se possível.

Confira também