VB.NET вызывает метод DLL с помощью аргументов ByRef - PullRequest
2 голосов
/ 03 апреля 2009

Используя VB.NET, есть ли способ передать ссылочный аргумент при вызове функции в dll.

Предположим, я хочу передать arg2 в качестве ссылочного аргумента, как бы я это сделал?


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

Другими словами, я хочу указать arg2 на что-то еще в вызываемой функции.

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Если целевая функция определена как ByRef, она будет работать автоматически, в противном случае вы не сможете.

Назовите это как:

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

В вашем случае вы фактически отправляете один параметр (массив объектов)

0 голосов
/ 15 марта 2011

Да, параметры в вашем массиве объектов будут содержать значения, которые были установлены внутри вызова метода. Следует помнить одну вещь: если 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]
...