通过


由于类型“<typename1>”不能转换为类型“<typename2>”,因此无法将“ByRef”参数“<parametername>”的值复制回匹配的实参

一个过程,声明该过程时使用的形参类型无法转换回调用实参类型。

在定义类或结构时,可以定义一个或多个转换运算符来将该类或结构类型转换为其他类型。 也可以定义反向转换运算符来将这些其他类型转换回类或结构类型。 当在过程调用中使用你的类或结构类型时,Visual Basic 可以使用这些转换运算符将参数的类型转换为其对应的参数的类型。

传递参数 ByRef 时,Visual Basic 有时会将参数值复制到过程的局部变量中,而不是传递一个引用。 在这种情况下,当过程返回时,Visual Basic 必须随后将局部变量值复制回调用代码中的参数。

如果将 ByRef 实参值复制到过程中,并且实参与形参为同一类型,则不必进行转换。 但是,如果类型不同,则必须对 Visual Basic 进行双向转换。 如果其中一个类型是你的类或结构类型,则 Visual Basic 就必须在该类型与其他类型之间进行双向转换。 这意味着你必须定义两个方向的转换运算符。

错误 ID: BC33037

更正此错误

  • 如果可能,请使用与过程参数同类型的调用参数,这样 Visual Basic 就不需要进行任何转换。

  • 如果需要调用实参类型与形参类型不同的过程,但不需要将值返回到调用实参中,请将形参定义为 ByVal 而不是 ByRef

  • 如果需要将值返回到调用参数中,则可定义反向转换运算符,以便 Visual Basic 可以转换回调用参数类型。

另请参阅