Freigeben über


Der Wert des ByRef-Parameters '<Parametername>' kann nicht in das entsprechende Argument zurückkopiert werden, da der Typ '<Typname1>' nicht in '<Typname2>' konvertiert werden kann

Aktualisiert: November 2007

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

Eine Prozedur ist mit einem Parametertyp deklariert, der nicht in den Typ des aufrufenden Arguments zurückkonvertiert werden kann.

Wenn Sie eine Klasse oder Struktur definieren, können Sie einen oder mehrere Konvertierungsoperatoren festlegen, um den Klassen- oder Strukturtyp in andere Typen zu konvertieren. Sie können auch Konvertierungsoperatoren für die umgekehrte Konvertierung festlegen, um die anderen Typen in den Klassen- oder Strukturtyp zurückzukonvertieren. Wenn Sie den Klassen- oder Strukturtyp in einem Prozeduraufruf verwenden, kann Visual Basic mithilfe dieser Konvertierungsoperatoren den Typ eines Arguments in den Typ des entsprechenden Parameters konvertieren.

Wenn Sie das Argument ByRef übergeben, kopiert Visual Basic zuweilen den Argumentwert in eine lokale Variable in der Prozedur, statt einen Verweis zu übergeben. In diesem Fall muss Visual Basic anschließend beim Beenden der Prozedur den Wert der lokalen Variablen in das Argument im aufrufenden Code zurückkopieren.

Wenn der Wert eines ByRef-Arguments in die Prozedur kopiert wird und Argument sowie Parameter denselben Typ aufweisen, ist keine Konvertierung erforderlich. Wenn sich die Typen jedoch unterscheiden, muss Visual Basic in beide Richtungen konvertieren. Wenn es sich bei einem der Typen um den Klassen- oder Strukturtyp handelt, muss Visual Basic beide Typen in den jeweils anderen Typ konvertieren. Dies bedeutet, dass Sie Operatoren für die Konvertierung in beide Richtungen definieren müssen.

Fehler-ID: BC33037

So beheben Sie diesen Fehler

  • Verwenden Sie nach Möglichkeit ein aufrufendes Argument von demselben Typ wie der Prozedurparameter, damit Visual Basic keine Konvertierung ausführen muss.

  • Wenn Sie die Prozedur mit einem anderen Argumenttyp als dem Parametertyp aufrufen müssen, jedoch in das aufrufende Argument kein Wert zurückgegeben werden muss, definieren Sie den Parameter als ByVal statt als ByRef.

  • Wenn in das aufrufende Argument ein Wert zurückgegeben werden muss, definieren Sie den Operator für die umgekehrte Konvertierung so, dass Visual Basic ihn in den Typ des aufrufenden Arguments zurückkonvertieren kann.

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Operators

Gewusst wie: Definieren eines Konvertierungsoperators

Konzepte

Prozeduren in Visual Basic

Parameter und Argumente von Prozeduren

Übergeben von Argumenten als Wert und als Verweis

Operatorprozeduren

Referenz

Operator-Anweisung