Hallo Leute, folgendes Problem ich arbeite mit Profilab- Expert und muss dort eine eigene kleine DLL Programmieren in dem Beispiel, das mitgeliefert wurde, das mit dem Borland Compilert compiliert wurde steht es so: void _stdcall GetInputName(unsigned char Channel, unsigned char *Name) { if (Channel == 0) strcpy(Name, "CLK"); //Name input 0 else strcpy(Name, "RST"); //Name input 1 } habt ihr eine Idee was ich machen muss damit es läuft? P.S. ich verwende den GCC bzw. Microsoft Compiler Danke schonmal für die Hilfe Chris
Hallo Roland, vielen Dank für die richtige und schnelle Antwort, aber kannst du mir noch kurz sagen warum das so sein muss und nicht einfach strcpy((unsigned char*) Name, "RST");?
weil strcpy() nun mal einen char* als erstes Argument haben will. Da hast keine char*, du hast einen unsigned char*. Da aber bekannt ist, dass char und unsigned char auf Bitebene kompatibel sind, und es in diesem Fall keinen Unterschied macht ob unsigned oder nicht, kann man den Pointer gefahrlos zurechtcasten: Man überstimmt praktisch den Compiler und teilt ihm mit: Die Datentypen stimmen zwar nicht 100% zusammen, aber das passt schon.
Zu den Ausführungen von Karl Heinz möchte ich noch folgendes hinzuzufügen: So etwas wie (Typ2) (Ausdruck1) konvertiert Ausdruck 1 vom Typ 1 in einen Ausdruck vom Typ 2. Da das Argument Name bereits vom Typ unsigned char* ist, strcpy() jedoch ein Argument vom Typ char* erwartet, wandelt man Name mittels (char*) Name in den gewünschten Typ um. Für Strings ist es unerheblich, ob sie als char* oder unsigend char* behandelt werden. Der Unterschied spielt nur beim numerischen Vergleich der einzelnen Bytes bzw. Buchstaben eine Rolle. Persönlich halte ich es so, dass ich unsigned char* (bzw. auf dem AVR uint8_t*) für Rohdaten irgendeiner Art nehme, und char* für Strings. Gruß, Roland
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.