allg. Fragen zu strings & unicode
-
Ich hab' in letzter Zeit angefangen WinAPI und C++ zu proggen und hab auch gleich ein paar allgemeine Fragen zu strings und unicode:
1.) Was ist der Unterschied zw. PSTR, LPSTR, LPCSTR und LPCWSTR??
2.) Und was heißt const im bezug auf pointer? Das sich der wert auf den der pointer zeigt nicht ändern darf oder die adresse auf die er zeigt?
3.) Sind std::strings auch unicode-basiert? Und wenn nicht, wie kann man sie konvertieren?
4.) Wieso kann ich LPSTR-strings die bei der deklaration NICHT initialisiert hab', später noch initialisieren ohne speicherplatz zu allokieren??
5.) Könnt ihr mir zwei zeilen sagen in der ihr einen (unicode)string deklariert und dann mit wsprintf einen int reinschreibt?Und noch zwei Fragen die zwar nichts mit unicode zu tun haben aber mir gerade einfallen und ich keinen neuen thread öffnen will

6.)was sind die letzten beiden parameter von CreateWindow? das was in der hilfe steht versteh ich nicht...
7.)was bedeutet dieser cast auf LPCREATESTRUCT beim vorletzten parameter von CreateWindow??THX für eure antworten
-
DeX3 schrieb:
3.) Sind std::strings auch unicode-basiert? Und wenn nicht, wie kann man sie konvertieren?
Nein, dazu gibt es std::wstring, oder besser, std::basic_string<TCHAR> für portablen Code.
-
DeX3 schrieb:
5.) Könnt ihr mir zwei zeilen sagen in der ihr einen (unicode)string deklariert und dann mit wsprintf einen int reinschreibt?
int zahl = 17; std::wstring text; wsprintf( _T("Hier kommt die Zahl %i rein"), zahl );So ähnlich, schlafe noch..

-
DeX3 schrieb:
1.) Was ist der Unterschied zw. PSTR, LPSTR, LPCSTR und LPCWSTR??
PSTR = char*
LPSTR = char* (ist seit 32bit dasselbe, aus uralten Zeiten noch ein LONG PTR)
LPCSTR = const char *
LPCWSTR = const wchar_t *DeX3 schrieb:
2.) Und was heißt const im bezug auf pointer? Das sich der wert auf den der pointer zeigt nicht ändern darf oder die adresse auf die er zeigt?
Bei LPCSTR heißt dies, Du darfst an diese Adresse nichts schreiben. Der Zeiger selbst darf nach oben und unten bewegt werden.
DeX3 schrieb:
4.) Wieso kann ich LPSTR-strings die bei der deklaration NICHT initialisiert hab', später noch initialisieren ohne speicherplatz zu allokieren??
Weil ein Zeiger hinzeigen darf wo er will. Dazu muss man keinen Speicher allokieren.
const char *p; // uninitialisiert p = "TEST"; // Nun zeigt er auf einen konstanten SpeicherbereichDeX3 schrieb:
6.)was sind die letzten beiden parameter von CreateWindow? das was in der hilfe steht versteh ich nicht...
hInstance = Das Modul zu dem das Fenster assoziert wird. Das war früher in 16bit und unter Windows95/98 nötig, da die Registrierung von Fenstern unterschiedlich erfolgte. Vergiß den Parameter.
lpParam = Ein eigener Zeiger auf Daten, die Du dem Fenster mitgeben möchtest.DeX3 schrieb:
7.)was bedeutet dieser cast auf LPCREATESTRUCT beim vorletzten parameter von CreateWindow??
Welcher cast? Welcher Code?
-
6.)was sind die letzten beiden parameter von CreateWindow? das was in der hilfe steht versteh ich nicht...
Also HANDLE hInstance, // handle to application instance
ist der Programmkopiezähler.
Ich glaub der is für Win NT nicht mehr so wichtig (bin mir aber nicht sicher) aber du musst ihn trotzdem übergeben.
Und mit dem letzten Paramteter kann man einen beim Registrieren der Fensterklasse reservierten bereich ansprechen.
Hab ich persönlich aber noch nie gebraucht.
-
[quote="Martin Richter"]
DeX3 schrieb:
DeX3 schrieb:
7.)was bedeutet dieser cast auf LPCREATESTRUCT beim vorletzten parameter von CreateWindow??
Welcher cast? Welcher Code?
oh sry... ich meine wenn man z.B. nen Button erzeugt (in WM_CREATE) wird immer (zumindest überall wo ich es bis jetzt gesehn' hab') als vorletzter parameter übergeben: ((LPCREATESTRUCT)lParam)-hIncstance
-
Schätze lParam ist ein void*
und den musst du in nen long pointer (LP) auf ne CREATESTRUCT casteln
-
Na, wenn du in WM_CREATE bist, ist lParam ein Zeiger auf eine CREATESTRUCT-Struktur. Das/der Member "hInstance" enthält dann das Instanz-Handle deines Programms.
-
wow leute, thx für eure hilfe