Получение IP-адреса с помощью UPnP InvokeAction ничего не возвращает, помогите? - PullRequest
0 голосов
/ 26 октября 2010

В основном, когда я использую vb.net или c # .net для этого, он работает отлично, но когда я использую vb6, он не работает, в моем цикле for, где захватывается соответствующая служба в соответствующем устройстве, вот код, который не дает результата ...

      ' serv is properly declared and instantiated by the for loop.
      Dim xins(0)
      Dim xouts(0)

      MsgBox ("Starting..." & serv.ServiceTypeIdentifier & vbCrLf & serv.id & vbCrLf & serv.LastTransportStatus) ' all this shows correctly.

      serv.InvokeAction "GetExternalIPAddress", xins, xouts

      MsgBox (xouts(0)) ' this should print the ExternalIP, but prints an empty string.

По сути, xouts (0) должен содержать IP-адрес, но его нет (вместо этого - пустая строка, без ошибок или исключений).

все остальные связанные с upnp.dll вещи работают, например: получение списка устройств и получение сервисов на каждом устройстве и т. Д. ... никаких проблем, просто InvokeAction, похоже, не работает на службе, которую я пытаюсь использовать включен (который имеет тип "WANIPConnection:1" в устройстве типа "WANConnectionDevice:1") ...

вот подробности интерфейса для справки: http://msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx

Я попытался получить возвращаемое значение от InvokeAction (которое показано в качестве последнего аргумента в объявлении интерфейса по ссылке, которую я только что предоставил, то есть в основном для пользователей C / C ++, в .NET и VB6, последний аргумент - это возвращаемое значение) и даже не смог заставить это работать, могу предоставить код о том, как я это сделал, если нужно, но я рад просто запустить его прямо, не ища возвращаемого значения, как это только определено в этом списке здесь: http://msdn.microsoft.com/en-us/library/aa381160(v=VS.85).aspx и реальные данные, которые я ищу, должны быть в массиве xouts, в частности, xouts (0), есть ли у кого-нибудь указания на то, что это может быть?

Возможно, проблема с брандмауэром? я работаю в режиме повышенных прав, и на устройстве (маршрутизаторе) включен upnp.

Обновление: vie заметил, что действие фактически выполняется / выполняется, но массив аргументов out (или аргумент ByRef в VB) не обновляется данными, что говорит о том, что комментарии markj о проблемах взаимодействия являются хорошим лидером.

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Это довольно просто. Эти параметры должны быть вариантами, которые содержат массив с одним элементом, индекс = 0.

Dim xins As Variant, xouts As Variant
:
:
ReDim xins(0), xouts(0)
serv.InvokeAction "GetExternalIPAddress", xins, xouts
MsgBox xouts(0)

Я уже некоторое время пользуюсь этим без проблем.

1 голос
/ 26 октября 2010

В документации, которую вы связали, говорится, что xins и xouts должны быть пустым массивом при вызове: вы можете попробовать изменить определение на

Dim xins() As Variant
Dim xouts() As Variant

Если это не сработает, вы даже можете попробовать

Dim xins As Variant
Dim xouts As Variant
...