基本上,當我使用vb.net或c#.net來做到這一點,它完美的作品,但是當我使用vb6,它不起作用,在我的for循環中相關設備中的相關服務被捕獲,在這裏是返回任何結果的代碼...使用UPnP獲取IP地址InvokeAction不返回任何內容,有幫助嗎?
' 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相關的東西的作品,即:retreiving設備列表和獲取在每個設備的服務等...沒有probs,只是InvokeAction似乎沒有對我嘗試使用的服務工作它上(這是"WANIPConnection:1"
類型的在型"WANConnectionDevice:1"
的裝置)...
這裏作參考的接口的細節:http://msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx
我試圖讓從InvokeAction的返回值(其被示出爲最後一個參數在我剛剛提供的鏈接的接口聲明中,主要針對C/C++用戶,在.NET和VB6中,最後一個參數是返回值),甚至是cou如果需要的話,我可以提供代碼,但我很樂意直接運行它,而無需查找返回值,因爲這是由此列表定義的:http://msdn.microsoft.com/en-us/library/aa381160(v=VS.85).aspx和我正在尋找的實際數據應該在xouts數組中,特別是xouts(0),有沒有人有任何可能的線索?
防火牆問題可能嗎?我在提升模式下運行,並且在設備(路由器)上啓用upnp。
更新:vie注意到該操作實際上正在運行/執行,但out參數數組(或VB中的ByRef參數)未被數據更新,這表明markj關於interop問題的評論是一個很好的主角。
是否有任何理由可以想到爲什麼它不適用於特定的計算機?因爲我看到代碼示例(在VBScript和VB6中)在哪裏工作,而我正在做同樣的事情,但事實並非如此。 +我不是一個業餘程序員,我知道我在做什麼,但它完全擺脫了我爲什麼對我挑剔。嘗試新的項目在vb6,不工作,我會嘗試另一臺電腦,但如果你有興趣,我會報告從另一臺電腦我的調查結果。 – 2010-10-30 00:32:40
我想到的唯一情況是,直到XP SP2才支持這個功能,據我所知,我已經在XP SP3上測試了上面的邏輯; Vista Gold,SP1和SP2;和Windows 7.Windows計算機必須安裝UPnP基礎結構,軟件防火牆必須允許流量通過,並且NAT設備必須啓用UPnP。 XP版本的UPnP.dll中有不完整的Type信息,但仍然可以使用VBScript回調來獲得UPnP功能的這個子集。我不知道爲什麼它不適合你。 – Bob77 2010-10-30 01:10:15
這裏有一個簡單的工作示例,可能值得一看:http://www.vbforums.com/showthread.php?t=592823 – Bob77 2010-10-30 01:13:10