[以下では VB6 を使用していますが、VB.NET または C# の両方で記述できるため、喜んでソリューションを受け入れます]
1 つの引数 (値を取得する変数の名前を説明する文字列) のみを取る関数 QueryStateVariable() を使用しようとしているので、次のように実行します。
Dim vReturn As Variant
vReturn = Service.QueryStateVariable("ExternalPort")
サービス オブジェクトが UPnPService (WanIPConnection) に正しく設定されている。これは WanIPConnection サービス (Wan 接続デバイスの直下) の下で発生しており、17 の状態変数のうち 4 つしか読み取ることができません (変数名の例として「ExternalPort」を使用しています)。他のすべての変数は、このエラー番号 -2147220972 (80040214) を、一般的な「失敗」の説明メッセージとともに返します。
Run-time error '-2147220972 (80040214)':
Method 'QueryStateVariable' of object 'IUPnPService' failed
現時点では、私はそれを無視して(例外を無視して)空の文字列を返していますが、これが何を意味するのか、またはフォローアップできるリードについて誰かが知っている場合は、非常に役立ちます. おそらく、誰かがこのエラー番号の意味または参照していることを知っていますか? または、誰かがこれを見たことがありますか、このエラー番号を取得していますか、または以前に遭遇したことがありますか? COM の世界では一般的な意味を持っているかもしれませんが、Google で特定できませんでした。
google で -2147220972 を検索してもヒットしません。- 記号を削除すると、いくつかありますが、すべて異なる意味を指しています。その隣に upnp という単語を入力すると、ヒットは 0 件です。ここで、「80040214 upnp」を検索すると (もちろん引用符なしで) 8 件の検索結果が得られます。これは、ほとんどすべてのユーザーが UPnP 対応ソフトウェアを使用し、エラー ログをコピー/貼り付けしてエラーに遭遇したことを示しています。エラー番号を報告したり、助けを求めたり、解決策や回答を受け取ったりするのは、プログラマーではありません (すばらしいことでした)。
更新:このエラーコードの定義を見つけましたが、説明は非常に一般的であり、解決方法についての手がかりを提供しないため、まだ解決に近づいていませんが、参考までに、こちらそれは次のとおりです(一部の人にとってはより理にかなっているかもしれません):
UPNP_E_DEVICE_ERROR の定義:
「変数はイベント化されておらず、リモート クエリはエラー コードを返しました。これは転送エラーではありません。デバイスは要求を受け取りましたが、エラーが返されました」.
.
.
*以下に書かれた追加テキストは、この質問を解釈するために読む必要はありませんが、追加情報に関心のある人のために含まれています: *
プログラムからログを出力として生成したので、17 個の変数のそれぞれの結果 (およびそれらの値を取得しようとする試み) を StackOverflow に貼り付けることができます。要約すると、WanIPConnection Service には 17 個の変数があるため、それらすべてを試してログに記録しました (成功した試行は 4 回だけで、残りはランタイム エラーです)。 19 個の状態変数 (WanIPConnection より 2 つ多いだけ)。私は 19 回すべての変数取得の試行を試み (そしてログに記録し)、成功した値の戻り値を 4 つしか受け取りませんでした (他のすべては実行時エラーになります)。
これが私のログです。実際の IP アドレスが変更されました (変更しないと炎上することがわかっているためです笑)。現在設定されているデバイスとサービスは、2 つのログのそれぞれの先頭に示されています。は:
[混乱を避けるための注意:取得した値の周りに星の記号 ( ) を配置して、空白を視覚化します。StackOverflow は、内容をイタリック体に変換したり、その間の文字列が空の場合は星をそのままにしたりします]*
最初のログ (WanIPConnection、17 個の状態変数):
uDevice (現在設定されているデバイス) を次のように設定します: WAN 接続デバイス、NETGEAR WNR1000v3 N150 ワイヤレス ルーター、urn:schemas-upnp-org:device:WANConnectionDevice:1
uService (現在設定されているサービス) を urn:schemas-upnp-org:service:WANIPConnection:1 に設定します。
1 回 (1 回中) の試行で GetQSV (ConnectionStatus 用) を完了しました。QSV の長さは 9 (0 以上) です。戻り値はConnected (Not Null) です。
1 回 (1 回中) の試行で GetQSV (ConnectionType 用) を完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (ExternalIPAddress 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さは 13 (0 以上) です。戻り値は110.122.16.83 (非 Null) です。
GetQSV (ExternalPort 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (InternalClient 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (InternalPort 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (LastConnectionError の場合) を 1 回 (1 回) の試行で完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
1 回 (1 回中) の試行で GetQSV (NATEnabled 用) を完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingDescription 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingEnabled 用) を 1 回 (1 回) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingLeaseDuration 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingNumberOfEntries 用) を 1 回 (1 回) 試行して完了しました。QSV の長さは 1 (0 以上) です。戻り値は2 (非 Null) です。
GetQSV (PortMappingProtocol 用) を 1 回の試行で完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PossibleConnectionTypes 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さは 9 (0 以上) です。戻り値は *IP_Routed* (非 Null) です。
GetQSV (RemoteHost 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (RSIPAvailable の場合) を 1 回 (1 回) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (稼働時間) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
2 番目のログ (WanPPPConnection、19 個の状態変数):
uDevice (現在設定されているデバイス) を次のように設定します: WAN 接続デバイス、NETGEAR WNR1000v3 N150 ワイヤレス ルーター、urn:schemas-upnp-org:device:WANConnectionDevice:1
uService (現在設定されているサービス) を次のように設定します: urn:schemas-upnp-org:service:WANPPPConnection:1
GetQSV (DownstreamMaxBitRate 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (UpstreamMaxBitRate 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
1 回 (1 回中) の試行で GetQSV (ConnectionStatus 用) を完了しました。QSV の長さは 9 (0 以上) です。戻り値はConnected (Not Null) です。
1 回 (1 回中) の試行で GetQSV (ConnectionType 用) を完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (ExternalIPAddress 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さは 13 (0 以上) です。戻り値は110.122.16.83 (非 Null) です。
GetQSV (ExternalPort 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (InternalClient 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (InternalPort 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (LastConnectionError の場合) を 1 回 (1 回) の試行で完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
1 回 (1 回中) の試行で GetQSV (NATEnabled 用) を完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingDescription 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingEnabled 用) を 1 回 (1 回) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingLeaseDuration 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PortMappingNumberOfEntries 用) を 1 回 (1 回) 試行して完了しました。QSV の長さは 1 (0 以上) です。戻り値は2 (非 Null) です。
GetQSV (PortMappingProtocol 用) を 1 回の試行で完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (PossibleConnectionTypes 用) を 1 回 (1 回中) 試行して完了しました。QSV の長さは 9 (0 以上) です。戻り値は *IP_Routed* (非 Null) です。
GetQSV (RemoteHost 用) を 1 回 (1 回中) 試行しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (RSIPAvailable の場合) を 1 回 (1 回) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0
GetQSV (稼働時間) を 1 回 (1 回中) 試行して完了しました。QSV の長さが 0 です (長さチェックの失敗)。戻り値は ** (非 Null) です。[-2147220972] オブジェクト「IUPnPService」のメソッド「QueryStateVariable」が失敗しました LastDllError: 0