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