Du kan ikke caste en TCHAR til en char * - T-CHAR er som wisen skriver egentlig en \"short\"/double-byte. Men ... følgende er muligt/tilladt:
TCHAR t = \'c\'; char a = (char)t; char s[12] = \"\"; int b = (int)t;
hvis du vil have indholdet \"hældt\" over i en char *, kan du f.eks. bruge sprintf;
sprintf(s, \"%c\", (char)t);
Jeg mener at TCHAR er beregnet til Double-character byte sets (typisk japanske/kinesiske tegn) - og d.o. laver ikke nogen konvertering når du laver char\'en. Under C++ Builder understøttes DCBS af AnsiString datatypen - og den har overloaded alle funktioner/operander så man kan bruge TCHAR variabler direkte - noget tilsvarende er formentlig muligt under MVC.
Først det grundlæggende: Når man laver C++ programmer til windows er der to måder at repræsentere tekststrenge: ANSI og UNICODE. Ansi er den gammeldags som alle kender, hvor hvert tegn fylder 8 bit. Unicode er en nyere standard hvor tegnene fylder 16 bit (eller kan være mappet til 8 bit gennem en specielt map, f.eks. UTF8 eller ISO-8859. I Unicode er der plads til alle mulige sprogs specielle tegn, som ovenfor antydet. Når du vælger at oversætte et program, kan du vælge om du vil bruge unicode eller ansi. Dette påvirker både visse interne typedefinitioner, API definitioner og de runtime libraries der linkes med. Omkring TCHAR: TCHAR er en makro der skifter betydning afhængig af om du kører Unicode eller ANSI. Hvis du oversætter uden unicode (så du bruger 8 bits tegn) så er TCHAR det samme som char. Hvis du oversætter med UNICODE, så er TCHAR det samme som wchar_t (som er 16 bit bred). Det betyder for det første at når man vælger at bruge TCHAR fremfor de grundlæggende typer char og wchar_t, så er det fordi man ønsker at kunne oversætte programmet til både Unicode og non-unicode. Når programmet oversættes uden brug af UNICODE, så kan du direkte assigne en TCHAR* til en char* (jeg antager du har glemt en stjerne i dit oprindelige spørgsmål). Men når du oversætter til Unicode, så dutter den ikke mere. Det er inkompatible typer og de kan ikke umiddelbart oversættes til hinanden. Selvfølgelig kan det lade sig gøre at gøre noget, men hvad det rigtige er afhænger i allerhøjeste grad af hvad din TCHAR streng faktisk indeholder. Men du vil vel stadig gerne have lidt hjælp til hvordan du skal komme videre. For det første skal du gøre løsningen afhængig af om du oversætter med unicode. Det kan du gøre med #ifdef _UNICODE hvis det ikke er unicode kan du bare assigen din TCHAR* til din char*. Hvis det er Unicode, kan du jo til at starte med anateg at det der står i din Unicode streng er i Latin1 tegnsættet (som er det mest anvendte tegnsæt i vesten). Her det så heldig at du blot kan tage de low-order 8-bit i hvert 16 bit tegn og assigne til din char streng. Så har du noget der ser fornugtigt ud. Men hvis Unicode strengen ikke er Latin1, så får du sludder. Håber det hjælper. Jeg kan ikke blive mere præcis uden mere information.
Når jeg læser fra registry får jeg returneret en TCHAR som jeg skal benytte i en spawn kommando. Grunden til at jeg ikke kunne bruge TCHAR (og jeg ville caste den), var at jeg kaldte den forkerte spawn kommando. Jeg har fundet det rigtige nu. Tak for besvarelserne. De var gode.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.