Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.06.2003, 08:48 Uhr
domi73



Wie kann ich am besten ein char* in einem LPCTSTR umwandeln. Ich habe mehrere Modalitäten versucht und bin zu keinem Ergebniss gekommen.

Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.06.2003, 10:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Mal davon abgesehen das du ins faslche Forum gepostet hast..

du kannst einfach sagen

C++:
char mystring[]="test";
CString str=mystring;



du müsstest das auch gleich dem Konstruktor von CString mit übergeben können.

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.06.2003, 10:53 Uhr
domi73



Hallo Heiko,

ich versuch's dir mein Problem zu schildern. Ich habe eine ActiveX programmiert. Eine der Funktionen hat als Parameter ein LPCTSTR.
Ich bekomme über die Schnittstelle von einem anderen Modul ein char*.

Also:
char* cBuffer;
LPCTSTR buffer;

ich habe:
buffer = (LPCTSTR) cBuffer; // Funktioniert nicht
Jetzt muss ich die Umwandlung machen. Hast du eine Idee?

Danke
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.06.2003, 11:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hast du mal veruscht ihm einen CString zu übergeben?

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.06.2003, 11:50 Uhr
domi73



Wenn man in einem ActiveX eine neue Methode hinzufügt, kann man die Parameterliste und die Rückgabewerte aus einer Liste auswählen. CString ist nicht vorhanden.

Gruß
Dominic
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.06.2003, 11:55 Uhr
~0xdeadbeef
Gast


Du kannst einem LPCTSTR nichts zuweisen. LPCTSTR ist definiert als

C++:
typedef const char *LPCTSTR;


will sagen, LPCTSTR ist konstant. Du kannst den char* aber einfach so übergeben, der wird dann implizit umgewandelt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.06.2003, 13:14 Uhr
virtual
Sexiest Bit alive
(Operator)


@beefy
Einspruch Euer Ehren:

C++:
const char* str;


Definirt mit str einen nicht konstanten Pointer auf eine Konstante. Daher kann man dem zeiger auf was zuweisen. LPCTSTR ist also selbst nicht konstant, sondern das, worauf gezeigt wird.
Ein

C++:
char * const str;


wäre etwas konstantes, dem man nichts zuweisen kann.

Der Vollständigkeit halber:

C++:
char* s1; // s1 ist nicht constant und zeigt auf etwas nicht constantes.
const char* s2; // s2 ist nicht constant und zeigt auf etwas constantes
char * const s3; // s3 ist constant und zeigt auf etwas nicht constantes
const char * const s4; // s3 ist constant und zeigt auf etwas constantes


Generell bezieht sich das const stets auf das, was links vom const zu finden ist. Die Formulierungen sind also gleichbedeutend (erstere, gängigere Variante ist eine alternative zur letzteren):

C++:
const char* str1;
char const * str2;


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.06.2003, 14:18 Uhr
~0xdeadbeef
Gast


Klar, du hast natürlich recht. Wie dem auch sei, bei einem LPCTSTR ist der Pointer konstant.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.06.2003, 16:01 Uhr
Tommix



Hallo,
um den armen domi73 völlig zu verwirren, mische ich mich auch noch ein.

@Heiko:
Wie auch immer geartete char* in CString oder andere String-Klassen hin- und her zu konvertieren ist im allgemeinen nicht besonders effizient.
(Die Frage war ja, wie man char* in LPCTSTR wandelt!)

@domi73:

C++:
    char* a;
    LPCTSTR b;
    b = (LPCTSTR) a;


Was soll daran nicht gehen?

@0xdeadbeef:

Zitat:

Klar, du hast natürlich recht.


Stimmt und

Zitat:

Wie dem auch sei, bei einem LPCTSTR ist der Pointer konstant.


stimmt nicht, wie virtual lang und breit erklärt hat.


C++:
// windef.h
#define CONST const

// winnt.h:

typedef char CHAR;
//...
typedef CONST CHAR *LPCSTR, *PCSTR;
///...
typedef LPCSTR LPCTSTR;

// ->
// LPCTSTR == const char*
//


Gruss, Tommix

Dieser Post wurde am 25.06.2003 um 16:23 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
25.06.2003, 16:29 Uhr
ao

(Operator)


@Tommix: Das soll wohl als Beweis dafür dienen, daß const char* und LPCTSTR dasselbe sind? Das sind sie auch - wenn nicht #define UNICODE gesetzt ist. Wenn doch, dann ist LPCTSTR ein Zeiger auf "wide character", letztendlich ein const unsigned short *, und dann geht die Umwandlung z.B. über Hilfsfunktionen wie MultiByteToWideChar oder WideCharToMultiByte.

Alles, was mit LPCTSTR zu tun hat, ist übrigens Windows-spezifisch und hat mit C eigentlich nix zu tun ;-)

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: