型 '<typename1>' は型 '<typename2>' に変換できないため、'ByRef' パラメータ '<parametername>' の値を、一致する引数に戻してコピーすることはできません。

更新 : 2007 年 11 月

呼び出し元の引数の型に変換して戻すことができない型のパラメータが、プロシージャに宣言されています。

クラスまたは構造体を定義するとき、その型を他の型に変換するための 1 つ以上の変換演算子を定義できます。また、他の型から元のクラス型または構造体の型に戻すための、逆変換演算子も定義できます。このようなクラス型または構造体の型をプロシージャ呼び出しに使用すると、Visual Basic はこれらの変換演算子を使用して、引数の型を対応するパラメータの型に変換します。

引数を ByRef で渡した場合に、Visual Basic は参照を渡すのではなく、引数の値をプロシージャのローカル変数にコピーする場合があります。このようなケースでは、プロシージャから制御が戻ったとき、Visual Basic はローカル変数の値を呼び出し元のコードの引数にコピーして戻す必要があります。

ByRef の引数の値がプロシージャにコピーされるとき、引数とパラメータの型が同じであれば、変換は必要ありません。しかし、型が同じでない場合、Visual Basic は双方向に型を変換することが必要になります。どちらか一方が自分で定義したクラス型または構造体の型である場合、Visual Basic はそれを他の型と双方向に変換する必要があります。つまり、双方向の変換演算子を定義することが必要です。

Error ID: BC33037

このエラーを解決するには

  • 可能であれば、呼び出し元の引数にプロシージャのパラメータと同じ型を使用します。そうすれば、Visual Basic は変換を行う必要がありません。

  • パラメータの型と異なる型の引数を指定してプロシージャを呼び出す必要があるが、値を呼び出し元の引数に戻す必要がない場合は、パラメータを ByRef ではなく ByVal で定義します。

  • 値を呼び出し元の引数に返す必要がある場合は、Visual Basic が呼び出し元の引数の型に戻すことができるように、逆変換演算子を定義します。

参照

処理手順

方法 : 演算子を定義する

方法 : 変換演算子を定義する

概念

Visual Basic におけるプロシージャ

プロシージャのパラメータと引数

引数の値渡しおよび参照渡し

演算子プロシージャ

参照

Operator ステートメント