Autor Beitrag
Chronos
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.12.08 19:03 
Hi, ich habe irgendwie nen für mich komisches Problem.

Ich versuche eine UPnP Verbindung aufzubauen und per Invoke an Daten zu kommen.
Das UPnp an sich funktioniert weitestgehend. Wenn ich versuche ein Invoke auszuführen bekomme ich ständig eine Excetion.
Doch mit dieser kann ich irgendwie recht wenig anfangen. Vielleicht wisst ihr ja was da quer läuft ?

Hier erstmal die Exception:
ausblenden Quelltext
1:
Typkonflikt. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))					


Nun noch der Prog Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
object objOutVal = new object[4];
string xmlText = null;

UPnPDeviceFinder upnpFinder = new UPnPDeviceFinder();
UPnPDevices upnpDevices = upnpFinder.FindByType("urn:schemas-upnp-org:device:WANConnectionDevice:1"0);
UPnPService ContentDirectory = new UPnPService();
         
foreach (UPnPDevice upnpDevice in upnpDevices)
{
     MessageBox.Show(upnpDevice.ModelName.ToString());
     UPnPServices upnpServices = upnpDevice.Services;
     foreach (UPnPService upnpService in upnpServices)
     {
           if (upnpService.Id == "urn:upnp-org:serviceId:WANIPConn1")
           {
                 ContentDirectory = upnpService;
           }
     }
}
ContentDirectory.InvokeAction("GetExternalIPAddress"nullref objOutVal);
xmlText = (string)((object[])(objOutVal))[0];


Was ich schon herausbekommen habe, das der Fehler immer bei ContentDirectory.InvokeAction() passiert. Ich vermute mal das es was mit dem objOutVal Object was zu tun hat. Nur eine Lösung fällt mir aufgrund meiner zugegeben noch etwas beschränkten Programmierkenntnise nicht ein.

Könnt ihr mir vielleicht nen Tipp geben ?
P.S. Siehe dazu auch diesen LINK

Thx
Chronos


Zuletzt bearbeitet von Chronos am Fr 12.12.08 20:45, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.12.08 19:58 
Es ist nicht gern gesehen, wenn du Crossposts in anderen Foren nicht angibst und verlinkst.
www.mycsharp.de/wbb2...d.php?postid=3502089
Es könnten ja dort bereits Antworten stehen. Durch die Verlinkung kann man vorher nachschauen bevor man evtl. das selbe erneut schreibt.

Bist du sicher, dass du dort null übergeben musst?
Und bist du sicher, dass die if-Abfrage vorher erfolgreich war?

Ich habe leider keine Angabe gefunden, was die Parameter sein müssen, aber deine Fehlermeldung besagt ja, dass der Typ einer der übergebenen Parameter falsch war.
Chronos Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.12.08 21:02 
Hi jaenicke, sorry wegen dem Link, ja der verlinkte Beitrag ist von mir, wusste nicht das ich den Link hier auch posten sollte, aber sicher wenn man drüber nachdenkt schon besser. Hab ihn oben eingefügt, merk ich mir für die Zukunft :)

Ja was die If Abfrage angeht, wird diese ausgeführt, und der Service wird auch gefunden. Soweit ist alles klar.
Was die Docu zu der UPnP API angeht hab ich die Infos hier her
msdn.microsoft.com/e...aa382303(VS.85).aspx

Was die InvokeAction Methode direkt angeht hab ich die Infos von dieser Seite
msdn.microsoft.com/e...aa382237(VS.85).aspx
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.12.08 21:08 
Mir sticht da sofort dieser Satz ins Auge bei dem Inputargument, wo du null benutzt hast:
Zitat:
If the action has no input arguments, this parameter must contain an empty array.
Ich glaube nicht, dass dann null richtig ist, wie ich anfangs ja auch vermutet habe.
Chronos Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.12.08 21:23 
Ok, hast recht, das hab ich irgendwie übersehen. :oops:

Ich hab jetzt mal statt null nen leeres Array genutzt.

Vorteil:
Diese Exception taucht nicht mehr auf

Nachteil:
Es gibt jetzt eine Andere, die mir noch weniger sagt als die andere :cry:
ausblenden Quelltext
1:
Eine vom Benutzer angegebenen Komponente, oder ein Abonnent verursachte einen Ausnahmefehler. (Exception from HRESULT: 0x80040208)					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.12.08 21:34 
Das sagt mir auch nichts und da Google keinen einzigen Treffer hat weiß ich da auch grad nicht weiter.

Was auch daran liegt, dass ich mich mit UPnP zwar mal genauer beschäftigen wollte, aber nie die Zeit dafür hatte. Vielleicht komme ich dazu zu schauen was da schief laufen könnte, ich kann es aber nicht versprechen.

Deshalb hoffe ich eher, dass jemand anderes dazu etwas sagen kann, der sich damit besser auskennt, aber ich glaube viele gibt es hier nicht, die sich damit auskennen.

// EDIT:
Höchstens meine zweite Vermutung fällt mir wieder ein. Bist du sicher, dass die if-Abfrage erfolgreich ist? Also dass das nicht ein leeres neu erzeugtes Objekt ist nach der for-Schleife?
Chronos Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.12.08 21:46 
Hmm ja, ich denke schonmal das die If Abfrage ordnungsgemäß ausgeführt wird. Wenn ich in die If
ausblenden C#-Quelltext
1:
2:
ContentDirectory = upnpService;
MessageBox.Show(upnpService.Id.ToString());


Eintrage, bekomme auch ordnungsgemäß den Servicenamen ausgegeben


### EDIT ###
Ebenfalls hab ich versucht nach den For-Schleifen eine Message auszubekommen.
Mit MessageBox.Show(ContentDirectory.Id.ToString()); klappts ebenfalls. Also miss die If ja erfolgreich gewesen sein.