VB.NET を使用して、dll で関数を呼び出すときに参照引数を渡す方法はありますか。
arg2 を参照引数として渡したいとします。
method.Invoke(obj, New [Object]() {arg1, arg2, arg3})
つまり、呼び出された関数内で arg2 を別の何かに向けたいと考えています。
定義されたターゲット関数ByRef
が自動的に機能する場合、それ以外の場合はできません。
次のように呼び出します。
method.invoke(obj, arg1, arg2, arg3)
あなたの場合、実際に1つのパラメーター(オブジェクト配列)を送信します
はい、オブジェクト配列のパラメーターは、メソッド呼び出し内で設定された値を保持します。注意すべきことの 1 つは、arg1、arg2、および arg3 が値型 (Int32 など) である場合、実際の arg1 変数は更新されていないということです。これは、その値が参照ではなく配列にコピーされたためです。
これを回避するには、関数呼び出しの前にオブジェクト配列を作成し、後で配列から値を引き出します。このような
Dim paramArray = New [Object]() {arg1, arg2, arg3}
method.Invoke(obj, paramArray)
arg1 = paramArray[0]
arg2 = paramArray[1]
arg3 = paramArray[2]