Не удается скопировать значение <имяПараметра> параметра ByRef обратно в соответствующий аргумент, поскольку тип <имяТипа1> невозможно преобразовать к типу <имяТипа2>
Обновлен: Ноябрь 2007
Cannot copy the value of 'ByRef' parameter '<parametername>' back to the matching argument because type '<typename1>' cannot be converted to type '<typename2>'
Процедура объявлена с параметром типа, который не может быть преобразован обратно к типу аргумента вызова.
При определении класса или структуры можно определить один или несколько операторов преобразования для преобразования типа класса или структуры к другим типам. Можно также определить операторы обратного преобразования для преобразования других типов обратно к типу класса или структуры. При использовании типов класса или структуры в вызове процедуры Visual Basic может использовать эти операторы преобразования, чтобы преобразовать их к типу соответствующего параметра для этой процедуры.
При передаче аргумента ByRef, Visual Basic иногда копирует его значение в локальную переменную в процедуре вместо передачи ссылки. В таком случае, когда процедура возвращает результат, Visual Basic должен скопировать значение локальной переменной обратно в аргумент в коде вызова.
Если значение аргумента ByRef копируется в процедуру и аргумент и параметр имеют один и тот же тип, то преобразование не требуется. Но если типы различны, то Visual Basic должен выполнить преобразование в обоих направлениях. Если один из типов является типом соответствующего класса или структуры, то Visual Basic должен выполнить его преобразование к другому типу и обратное преобразование. Это означает, что необходимо определить операторы преобразования в обоих направлениях.
Идентификатор ошибки: BC33037
Для исправления данной ошибки выполните следующее.
Если это возможно используйте аргумент вызова того же типа, что и параметр процедуры, поэтому для Visual Basic нет необходимости выполнять какие-либо преобразования.
Если необходимо вызвать процедуру с аргументом, тип которого отличается от типа параметра, но нет необходимости возвращать результат в аргумент вызова, то определите параметр как ByVal, а не ByRef.
Если требуется возвращать значение в аргумент вызова, то определите оператор обратного преобразования таким образом, что Visual Basic сможет преобразовывать обратно к типу аргумента вызова.
См. также
Задачи
Практическое руководство. Определение оператора
Практическое руководство. Определение оператора преобразования
Основные понятия
Параметры и аргументы процедуры
Передача аргументов по значению или по ссылке