2009-04-03 4 views
1

Mit VB.NET gibt es eine Möglichkeit, ein Referenzargument beim Aufrufen einer Funktion in einer DLL übergeben.VB.NET Invoke DLL-Methode mit ByRef-Argumente

Angenommen, ich möchte arg2 als Referenzargument übergeben, wie würde ich das tun?


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

Mit anderen Worten möchte ich Arg2 auf etwas anderes innerhalb der aufgerufenen Funktion zeigen.

Antwort

1

Wenn die Zielfunktion definiert als ByRef wird es automatisch funktionieren sonst AFAIK können Sie nicht.

Nennen Sie es mögen:

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

In Ihrem Fall, dass Sie tatsächlich ein Parameter (ein Objekt-Array) Senden

+0

Ja, das Zielfunktionsargument ist durch ref definiert, aber es funktioniert nicht. – user79755

+0

Ja, so nenne ich es. – user79755

+0

gerade aktualisiert, können Sie das versuchen? –

0

Ja, die Parameter in Ihrem Objekt-Array werden die Werte halten, die innerhalb der Methode gesetzt wurden Anruf. Eine Sache, die beachtet werden muss, ist, dass, wenn arg1, arg2 und arg3 Werttypen sind (wie Int32), die tatsächliche Variable arg1 nicht aktualisiert wurde, weil ihr Wert in das Array kopiert wurde, nicht seine Referenz.

Um dies zu umgehen, erstellen Sie das Objekt-Array vor dem Funktionsaufruf, und ziehen Sie anschließend die Werte aus dem Array. So ist

Dim paramArray = New [Object]() {arg1, arg2, arg3} 
method.Invoke(obj, paramArray) 
arg1 = paramArray[0] 
arg2 = paramArray[1] 
arg3 = paramArray[2]