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
Parameter und Argumente von Prozeduren
Übergeben von Argumenten als Wert und als Verweis