Das T-Makro und Visual Studio08
-
Hi,
ich verstehe noch immer nicht, was ich in meinen VS2008 Projekten falsch
mache.Dieser Code funktioniert nur mit T-Makro (wozu auch immer das ist???)
und dem ganzen gekonvertiere auf LPCTSTR usw.Aber warum ist das so? Bzw. kann ich das auch ohne dies ganze "brimborium"
wie unter VS2003.net irgendwie kompilieren? Muss ich dazu irgendwo was
umstellen?CString abc; abc="Install-Pfad: "; CRegKey keyx; char bufferx[256]; DWORD dwCountx = sizeof( bufferx); keyx.Open( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Crytek\\Crysis\\"), KEY_READ); keyx.QueryValue( (LPTSTR)bufferx, _T("InstallDir"), &dwCountx); keyx.Close(); MessageBox((LPCTSTR)bufferx); // enthält nichts, wenn nicht explizit (LPCTSTR) angegeben...? abc+=(LPCTSTR)bufferx; // argh auch hier muss es wieder sein...? //liste1 ist ein CListControl im Berichtsstyle mit T-Suppe für Texte.... liste1. InsertColumn ( 0, _T("Spalte1"), LVCFMT_LEFT, 150 ); liste1 . InsertColumn ( 1, _T("Spalte2"), LVCFMT_CENTER, 180 ); liste1. InsertItem(0,abc,0); liste1 . SetItemText(0,1,_T("erstes item 2 Spalte"));Kann mir das bitte jemand erklären, wenn es schon nicht anders geht?
Ich würde es dann zumindest gerne verstehen, warum ich es so machen muss.
-
So, ich glaube ich bin nen Schritt weiter (*monologführ*)...
Ich habe in den Projekt-Eigenschaften unter Konfigurationseigenschaften/Allgemein/Zeichensatz auf "nicht festgelegt" umgestellt.
Also ist der ganze Quark nur wegen Unicode notwendig?!
Unicode werde ich wohl nur brauchen, wenn mein Programm im Ausland eingesetzt werden soll, oder? Vonwegen Sonderzeichen usw?!
-
Du solltest dich gleich daran gewöhnen mit TCHAR zu arbeiten... heute macht es IMHO keinen Sinn mehr nur ANSI zu verwenden... auch wenn das Programm nur in DE eingesetzt wird, kann es trotzdem vorkommen, dass jemand Chinesisch eingeben will...
-
Hallo Jochen,
das werde ich mir dann mal als Empfehlung zu Herzen nehmen.
Muss ich dann wirklich wie in dem Fall oben überall nach LPCTSTR casten?
Ist das nicht ein irrer Aufwand? Besonders bei alten Projekten...läuft man
dann nicht Gefahr, wie ich in dem Code oben, plötzlich nur noch halb
zusammengeschusterte Variableninhalte zu bekommen, wenn man diesen Cast
übersieht/vergisst?Oder meintest du, dass mit TCHAR das allgemein wegfällt

und ich halt char gegen TCHAR tausche, ohne zwingend weitere Änderungen
am Code vornehmen zu müssen?
-
Es wäre also die optimalste Darstellung mit Unicode wie folgt sinnvoll,
wenn ich dich recht verstanden habe?CString abc; abc="Install-Pfad: "; CRegKey keyx; TCHAR bufferx[256]; //TCHAR statt char, damit Unicodetauglich DWORD dwCountx = sizeof( bufferx); keyx.Open( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Crytek\\Crysis\\"), KEY_READ); keyx.QueryValue( bufferx, _T("InstallDir"), &dwCountx); keyx.Close(); MessageBox(bufferx); abc+=bufferx; liste1. InsertColumn ( 0, _T("Spalte1"), LVCFMT_LEFT, 150 ); //T-Makro notwendig... liste1 . InsertColumn ( 1, _T("Spalte2"), LVCFMT_CENTER, 180 ); liste1. InsertItem(0,abc,0); liste1 . SetItemText(0,1,_T("erstes item 2 Spalte"));Richtig?
-
Sobald Du castest, ist i.d.R. irgendwas faul...
Und warum verwendest Du nicht "QueryStringValue"???
PS: Bei irgend einer Angabe von "Anzahl" musst Du immer in der Doku nachschauen, ob die Anzahl der *Bytes* oder *Zeichen* gemeint ist!!!
Bei QueryStringValue ==> sizeof(bufferx)/sizeof(TCHAR)