Dynamische array laenge
-
std::wstring waehre natuelrich das beste, da diese funktion das auch returniert, aber leider funktioniert nichts davon:
ich hab hier ein paar versionen probiert, alle compilieren, aber es landet nichts in str, es bleibt immer leer
std::wstring str = _T(""); LVITEM item; item.iSubItem = Number; //item.pszText = (LPWSTR)&str; //- leer nach SendMessage //item.pszText = (LPWSTR)str.c_str(); //- leer nach SendMessage ::SendMessage(m_Handle, LVM_GETITEMTEXT, Pos, (LPARAM)(LVITEM *)&item);
-
das funktioniert:
std::wstring funk(UINT Number, UINT Pos){ std::wstring str = _T(""); LVITEM item; item.iSubItem = Number; item.cchTextMax = (int)str.max_size(); item.pszText = (LPWSTR)str.c_str(); ::SendMessage(m_Handle, LVM_GETITEMTEXT, Pos, (LPARAM)(LVITEM *)&item); return str.c_str(); }was ich mich allerdings frage ist, ist es teuer wenn ich pszTextMax die maximale groesse von wstring geb [ist mehr als 1miliarde}
//qt geaendert da es erst nicht ging
-
Ähm Dein Code ist falsch
!Du machst einen const Cast. Da muss man bei C++ Strings sehr aufpassen:
item.pszText = (LPWSTR)str.c_str();Außerdem ist std::wstring auch nicht Zeichensatzunabhänig (da es eben NUR mit UNICODE funktioniert, siehe Definition)... . Da müsste man schon sowas machen:
#include <string> // namespace NCppString // { #ifdef UNICODE typedef std::wstring CString; #else typedef std::string CString; #endif // UNICODE // };Ob der Scope notwendig ist, hängt davon ab, ob du MFC nutzt (da wir hier im WinAPI-Subforum sind, hab ichs deshalb auskommentiert
).
-
ich hab den code geaendert, nu funktioniert alles,
das mit unicode weiss ich, das ist auch ok so, ich compiliere IMMER und ALLES NUR auf unicode, multibyte hab ich bisher nie auch nur ein kleines prograemmchen geschrieben #gg
auch damals fuer die firma, das programm was die codepages umgespeichert hat, hab ich alles unicode compiliert
-
IMHO können Win95 und Win98 kein Unicode, stört dich das nicht? (Nicht dass du mich falsch verstehst, mich würde es auch nicht stören :D)
-
was interessiert mich 95 oder 98 #gg - es funktioniert alles unter 2k - xp und vista, das reicht mir {o;
wer 95 oder 98 noch benutzt hat 1. selber schuld und 2. braucht meine programme nicht #gg {o;
-
Also ähm ich finde 'wer 95 oder 98 noch benutzt hat 1. selber schuld und 2. braucht meine programme nicht #gg {o;' n bissl sinnlos, da ich mir nicht vorstellen kann, dass Deine Programme in China zur Verwendung kommen :p . Da sollte man doch lieber auf geringeren Speicherverbrauch setzen, oder noch besser: auf beides.
-
CodeFinder schrieb:
da ich mir nicht vorstellen kann, dass Deine Programme in China zur Verwendung kommen
meeep - falsch, meine programme werden fast immer in 25 verschiedenen sprachen verwendet, von CHT/CHS bis hin zu ELL und THA {o;
-
CodeFinder schrieb:
Du machst einen const Cast. Da muss man bei C++ Strings sehr aufpassen:
item.pszText = (LPWSTR)str.c_str();Direkte typspzifische casts würde grundsätzlich in #ifdef _UNICODE Blöcke einschließen. Ansonsten gehört eben LPTSTR verwendet!
Das ist mit Abstand das sicherste und flexibelste!Und wenn dieser Code eben nur für Unicode funktioniert, dann gehört in die #else Sektion oder in den Programmkopf #error rein!
Der Programmkopf hat natürlich den Nachteil, dass man ihn nicht sieht, wenn man solche Code-Passagen kopiert! So was mach CPP Programmierer (Copy&Paste Programmer) ja ständig...
-
achwat, warum so viel stress machen mit den ganzen ifdef gebla, das sind meine sources und diese werden immer nur unicode compiliert, auch die anderen die bekommen die sources + solution, und jeder proggt nur in unicode, grade weil alles in 25 sprachen uebersetzt wird
multibyte kann und werd ich komplett ignorieren
//dazuedit, tschuldige wenns ein bissl forsch klang, danke fuer die gut gemeinten ratschlaege {= weiss es selbstverstaendlich zu schaetzen