2009-04-03 13 views
1

VB.NETを使用すると、DLLで関数を呼び出すときに参照引数を渡すことができます。VB.NET Invoke DLLメソッドby ByRef引数

arg2を参照引数として渡したいとしたら、どうすればよいでしょうか?


method.Invoke(obj, New [Object]() {arg1, arg2, arg3}) 

つまり、呼び出された関数内のarg2を指したいと思います。

答えて

1

ターゲット機能がByRefと定義されていると、自動的に動作しますが、そうでなければAFAIKできません。

が好きそれを呼び出す:あなたのケースで

method.invoke(obj, arg1, arg2, arg3) 

をあなたが実際にはい、あなたのオブジェクト配列内のパラメータはメソッドの内部で設定された値を保持する一つのパラメータ(オブジェクト配列)

+0

はい、ターゲット関数の引数はrefで定義されていますが、機能しません。 – user79755

+0

うん、それは私がそれを呼んでいる方法です。 – user79755

+0

ちょうど更新しました、あなたはこれを試すことができますか? –

0

を送りますコール。注目すべきことは、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] 
関連する問題