UPnP IUPnPDevice-> Zugriff auf Services schlägt fehl! [ERLEDIGT]



  • Hallo!

    Ich hoffe, dass ich hier richtig bin, wenn nicht bitte ich schonmal vorab um Entschuldigung! 😉

    Ich habe ein Problem mit der UPnP API von Microsofts Platform SDK. Ich verwende die aktuellste Version des SDK (Microsoft Platform SDK for Windows Server 2003 R2, March 2006 Edition).

    Mein Problem ist, dass ich bei bestimmten Devices die Services nicht einlesen kann.
    Die Sampleanwendung GenericUCP aus dem Platform SDK Sampleordner weist diesen Fehler auch schon auf.

    Es geht um folgenden Codeabschnitt:

    void CGenericUCPDlg::OnSelEndOkComboDevice() 
    {
        // Current Device is changed
        TRACE(_T("SelendokDevice\n"));
    
    	HRESULT hr = S_OK;
    	IUPnPDevice *pDevice=NULL;
    	IUPnPServices* pServices = NULL;
    	IUnknown *punkEnum = NULL;
    	IEnumUnknown *pEU = NULL; 
    	int iSelectedItem;
    	long lIndex;
    	m_StatusText.SetWindowText(_T(""));
    	m_EventText.SetWindowText(_T(""));
    	iSelectedItem = m_DeviceCombo.GetCurSel();
    	if(iSelectedItem!=CB_ERR){
    		pDevice=(IUPnPDevice *) m_DeviceCombo.GetItemDataPtr(iSelectedItem);
    		pDevice->AddRef();
    		ClearServiceCombo();
    		hr = pDevice->get_Services(&pServices);
    		if(hr==S_OK){
    			long lCount;
    			hr = pServices->get_Count(&lCount);
    			if(SUCCEEDED(hr)){
    				if(lCount!=0){
    					// We have to get a IEnumUnknown pointer
    					hr = pServices->get__NewEnum(&punkEnum);
    					if(SUCCEEDED(hr)){
    						hr = punkEnum->QueryInterface(IID_IEnumUnknown, (VOID **) &pEU);
    						if(SUCCEEDED(hr)){
    							for(lIndex = 0; lIndex<lCount; lIndex++){
    								IUnknown *punkService = NULL;
    								IUPnPService *pService=NULL;
    								hr = pEU->Next(1, &punkService, NULL);
    								if(SUCCEEDED(hr)){
    

    Der IEnumUnknown->Next Aufruf (Zeile 34) gibt an dieser Stelle den Fehlercode "Out of Memory zurück". Der Fehler tritt IMMER dann auf, wenn das Device mehr als 1 Service hat und tritt nur bei manchen Devices auf, die genau ein Service haben.

    Ich habe nun ein eigenes Device erstellt, dass zwei Services enthält und bei diesem tritt der Fehler auch auf, mit dem gleichen Fehlercode. Das Device läuft lokal auf meinem Rechner, ebenso wie der ControlPoint. Die UPnP Libraries sind natürlich installiert.

    Im Netz habe ich bis auf folgende Meldung

    Re: Error: Traversing the service list using Next method failed
    by "Henry Rawas [MSFT]" <henryr@[EMAIL PROTECTED] > Feb 13, 2006 at 09:10 AM

    The most common cause for this is that an attempt to subscribe for events
    for the next service has failed.
    When the UPnP framework creates a service object, it will subscribe for
    events if eventing is suppoted by the service. If this fails, the creation

    of the service object fails.

    You can confirm this by getting a network traffic capture using netmon or
    ethereal.

    Henry

    --
    This posting is provided "AS IS" with no warranties, and confers no
    rights.
    "Rolandas R." <rolandas_r@[EMAIL PROTECTED]
    > wrote in message
    news:uwQK1WCMGHA.1472@[EMAIL PROTECTED]
    > Hi,

    > I am using the C++ sample code from PSDK.

    > Could someone please explain what is the reason of this error. I usually

    > get it for the software UPnP device (ICS under Windows XP), when the
    > hardware UPnP device (a router) is present, or in Windows ME with both
    > hardware and software devices?

    > Thanks.

    nichts gefunden, und diese sagt mir ehrlich gesagt auch nicht viel. Ich freue mich über jeden Hinweis, da ich wirklich nicht mehr weiter weiß.

    Vielen Dank im voraus!



  • Gibts wirklich keinen, der da Bescheid weiß, oder mich wenigstens an eine Adresse verweisen kann, von wo man weitere Infos erhalten kann? Die Microsoft MSDN Foren schweigen sich zu dem Thema leider auch aus. 😞



  • Ich würde mal in der Newsgroup microsoft.public.upnp fragen.

    http://groups.google.de/group/microsoft.public.upnp/topics?lnk=sg&hl=de

    Ich verwende die aktuellste Version des SDK (Microsoft Platform SDK for Windows Server 2003 R2, March 2006 Edition).

    Ist nicht das neuste SDK. 😉



  • Vielen Dank, habs nun auch mal in der Newsgroup probiert.

    Was ist denn zur Zeit das neueste Platform SDK von Windows?



  • Worrix schrieb:

    Was ist denn zur Zeit das neueste Platform SDK von Windows?

    Platform SDK wurde umbenant in Windows SDK und das neuste ist laut http://blogs.msdn.com/windowssdk/ :

    Windows SDK for Windows Server 2008



  • So, hab den Bug gefunden.

    Mein Fehler war, dass ich die Methoden und Implementationen des zweiten, hinzugefügten Services in die gleiche Klasse gepackt hatte, wie die des ersten Services. Dadurch schlug schon die Initialisation-Methode fehl, und die Advise Methode wurde nicht aufgerufen.

    Hab also die Methoden in zwei Klassen aufgetrennt und nu funktioniert es auch. Dummer Fehler.

    MfG,
    Worrix.


Anmelden zum Antworten