Toon posts:

[Win32/C++] const char * als LPCTSTR

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik ben de hele avond al aan het kloten met C++.
Voor de slimme c++er is de volgende vraag een eitje:

Ik heb de variable "name" zo een waarde toegekent.
code:
1
const char *name = lua_tostring(L, -1);


Nu moet ik "name" in een functie krijgen die een LPCTSTR verwacht:
code:
1
openImage(LPCTSTR f)


Ik krijg het maar niet voor elkaar :(

Kan er iemand me helpen??

[ Voor 7% gewijzigd door Verwijderd op 31-10-2003 22:17 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Allereerst: ***** Lees dit! Over topictitels in P&W ***** :)

Daarnaast kan ik niets met je vraag. Wat je meldt moet gewoon werken, een LPCTSTR is namelijk een Long Pointer to Constant String, en waarin de T inhoudt dat het al of niet Unicode is afhankelijk van je app-settings. Oftewel ervan uitgaande dat je niet met Unicode build: een const char *, die je reeds hebt.

Oftewel als je nou eens een compilererror of zo post kan ik er wellicht iets mee, of de hele functie waarin het gebeurd of zo.

Professionele website nodig?


Verwijderd

Topicstarter
Pffff,

die pointers zijn maar moeilijk:

een ander(maar zelfde probleem) voorbeeld:

code:
1
2
const char* name ="kaiton"; 
MessageBox(NULL,LPCTSTR(name),TEXT("ggg"),MB_OK);


mmm bb code is ook moeilijk ;)
const char* name ="kaiton";
MessageBox(NULL,LPCTSTR(name),TEXT("ggg"),MB_OK);

Dit compileerd en runt wel, maar er verschijnt geen "kaiton", maar iets van allemaal blokjes.

Wat doe ik nou toch fout?

[ Voor 35% gewijzigd door Verwijderd op 31-10-2003 22:46 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 31 oktober 2003 @ 22:44:
mmm bb code is ook moeilijk ;)
const char* name ="kaiton";
MessageBox(NULL,LPCTSTR(name),TEXT("ggg"),MB_OK);

Dit compileerd en runt wel, maar er verschijnt geen "kaiton", maar iets van allemaal blokjes.

Wat doe ik nou toch fout?
Correcte notatie is:
C++:
1
2
const char Name[] = "kaiton";
MessageBox(NULL, Name, Name, MB_OK);

Jouw declaratie van name is in principe ook valide, ik weet niet waarom dat niet werkt. Ik vind de LPCTSTR call die je uithaalt ook wel erg knap, dat is niet echt de bedoeling (en ik vind het knap dat het compileert, dacht dat het een macro was maar blijkbaar dus een typedef).

Professionele website nodig?


Verwijderd

Topicstarter
Ik doe:
const char* name="kaiton";


omdat de functie "lua_tostring" een "const char*" terug geeft.

Dus eigenlijk wil ik dit:

const char* name=lua_tostring();

(en Lua_tostring geeft dus een "const char*" terug


Het voorbeeld van jou compileert al helemaal niet.

C:\Personal\ipaq\luace\luacetst.cpp(73) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [7]' to 'const unsigned short *'

BTW maakt het uit dat ik voorPocketPC compileer?
Misschien iets met Unicode ofzo?

[ Voor 36% gewijzigd door Verwijderd op 31-10-2003 23:00 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Uhm ja, dank voor deze overduidelijke enorm relevante informatie :D

Weet je uberhaupt wel wat Unicode is? Het feit dat daar een W achter MessageBox verschijnt maakt het al Unicode, en PocketPC is dat per definitie (heeft geen ASCII API).

Hint: onder Unicode is het correcte datatype voor tekst een wchar_t ipv char, en dien je een L te plaatsen voor alle stringconstantes, bijv. L"kaiton".

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Overigens, om het charwidth-onafhankelijk te maken is er ook een typedef TCHAR gedefinieerd, je kunt dus het volgende bouwen:
C++:
1
2
const TCHAR  Name[] = _T("kaiton");
MessageBox(NULL, Name, _T("MyFirstBox"), MB_OK);

Dit werkt perfect onafhankelijk van of je met of zonder Unicode werkt :)

Professionele website nodig?


Verwijderd

Topicstarter
JOEPIE!!!

Dank u voor de hulp!
Die TChar''s werken idd veel beter!!!

HEEL ERG BEDANKT!!! _/-\o_ _/-\o_ _/-\o_

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 31 oktober 2003 @ 23:22:
JOEPIE!!!

Dank u voor de hulp!
Die TChar''s werken idd veel beter!!!

HEEL ERG BEDANKT!!! _/-\o_ _/-\o_ _/-\o_
My pleasure :)

Professionele website nodig?


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

curry684 schreef op 31 oktober 2003 @ 22:49:
Ik vind de LPCTSTR call die je uithaalt ook wel erg knap, dat is niet echt de bedoeling (en ik vind het knap dat het compileert, dacht dat het een macro was maar blijkbaar dus een typedef).
Dat is toch gewoon een function-style cast? LPCTSTR(x) staat gelijk aan (LPCTSTR)x dus het is wel correcte code (maar mooi is anders natuurlijk).

www.madwizard.org


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik dacht dus dat LPCTSTR zo gedefinieerd was:
C++:
1
2
3
4
5
#ifdef _UNICODE
#define LPCTSTR       const wchar_t*
#else
#define LPCTSTR       const char*
#endif

In dat geval zou de stelling zoals hij 'm had gebouwd expanderen tot:
C++:
1
MessageBox(NULL,const char*(name),TEXT("bier"),MB_OK);

En daarop krijg je echt een compiler error hoor :P

Vandaar dus mijn conclusie dat het een typedef moest zijn (klopt ook, logisch), want dan is het idd een function-style cast.

Professionele website nodig?

Pagina: 1