Vergleich von TCHAR



  • Hallo zusammen,

    ich habe folgende Funktion:

    bool getUsbInterface( int VID, int PID, TCHAR* name, usbInterface* usb_interface )
    {		
    	for ( int i = 0; i < numInterfaces; i++ )
    	{
    		if ( /*foundUsbInterfaces[i].vendorID  == VID && 
    			 foundUsbInterfaces[i].productID == PID && */
    
    			 _tcscmp( foundUsbInterfaces[i].name, name ) )
    			 // Vergleich geht nicht (immer true)
    		{
    
    			usb_interface = &foundUsbInterfaces[i];
    			// Probleme mit Zeiger 
    			return true;
    		}
    	}	
    	return false;
    }
    

    aufgerufen wird sie so

    #define NAME _T("HID-konformes Gerät")
    ...
    usbInterface myInterface;
    if ( usb.getUsbInterface( vid, pid, NAME, &myInterface ) )
    ...
    

    foundUsbInterfaces[i].name ist ein TCHAR mit der Länge 255 ...

    warum gibt er mir beim vergleich mit _tcscmp immer true zurück auch wenn die zwei werte anders sind ? wenn im vc++ 2005 nen watch auf "name" mache, so steht da auch immer nur der erste buchstabe drinnen.

    kann mir jemand helfen?

    grüße Nils



  • Weil du die Funktionsweise von _tscmp() nicht verstanden hast 😉

    man: strcmp() gibt 0 (= FALSE) zurück, wenn die Strings identisch sind, und einen Wert !=0 (= TRUE), wenn sie verschieden sind (damit ist es auch möglich anzugeben, welcher String lexikografisch "größer" war).

    (und _tscmp() ist die TCHAR-Version von strcmp())



  • hehe das würds erklären, danke schön.



  • Noch ne Sache, wo ist mein Denkfehler bei der Rückgabe, des Interfaces? Ich hätte gerne im Hauptprogramm nach dem aufruf, von

    usbInterface myInterface;
    if ( usb.getUsbInterface( vid, pid, NAME, &myInterface ) )
    ...
    

    in myInterface die Sachen drin stehen, die hier

    usb_interface = &foundUsbInterfaces[i];
    

    zugewiesen wurden. Sorry ich bin neu in c++ und mit den ganzen Zeigern hab ich noch ein wenig meine Probleme.



  • Mit der Anweisung biegst du nur den (lokalen) Zeiger um. Du solltest stattdessen den Wert hinter diesem Zeiger neu zuweisen:

    *usb_interface = foundUsbInterfaces[i];
    

    (btw, in C++ nimmt man üblicherweise Referenzen für Ausgabeparameter)



  • Wunderbar ... es klappt ... vielen Dank


Anmelden zum Antworten