ERLEDIGT
JA
JA
ANTWORTEN
26
26
ZUGRIFFE
1332
1332
EMPFEHLEN
-
Hallo zusammen,
ich möchte gerne eine Benutzereingabeaufforderung in meine Konsolenapplikation einbauen, die den Wert als PWSTR speichert, da die folgende Funktion, die den Wert benötigt, nur dieses Format akzeptiert.
Wenn ich jedoch das normale cin und cout aus iostream benutze, funktioniert dies leider nicht, denn mein beschränktes Wissen erlaubt es mir nur den Eingabewert in einem String, Char oder Int zu speichern.
Gibt es eine Möglichkeit den Wert direkt in PWSTR zu speichern oder in PWSTR umzukonvertieren? Wenn ja, hat jemand ein Beispiel zur Hand?
Vielen Dank im Voraus,
Felsti
-
29.04.05 18:32 #2
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Casten wäre vielleicht eine Möglichkeit.
Was ist das denn für eine Funktion die nur einen PWSTR akzeptiert? Oder zeig mal den entsprechenden Codeausschnitt.
mffg
umbrasaxum
-
Also um genau zu sein handelt es sich um Funktionen aus dem RMS SDK von Microsoft, die ich mit einer Benutzereingabe füttern will.
Beispiel:
Code :1 2 3 4 5 6
hr = DRMCreateUser( wszGroupID, NULL, L"Windows", &hUser );
Die wszGroupID ist dabei der Wert, der die Eingabe bekommen soll. Bis jetzt ist es als Flag in der Kommandozeile gelöst, was aber bei der Angabe von mehreren Werten unschön und unerwünscht ist.Geändert von Felsti (29.04.05 um 18:46 Uhr)
-
29.04.05 18:47 #4
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Und wenn du das so machst:
Code :1 2 3 4 5 6 7 8 9 10 11
char *wszGroupID; cin>>wszGroupID; ......... hr = DRMCreateUser( (PWSTR)wszGroupID, NULL, L"Windows", &hUser );
mfg
umbrasaxum
-
Danke für den Tipp, aber wenn ich das eingebe kommt folgende Fehlermeldung beim Kompilieren:
error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'PWSTR' akzeptiert (oder keine geeignete Konvertierung möglich)
-
29.04.05 19:23 #6
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Du sollst ja wie im Beispiel auch char * nehmen und nicht PWSTR.
mfg
umbrasaxum
-
Ach verdammt, ich war gerade schon aufm Sprung und hab nen Tippfehler drin gehabt.
Ich habe zu hause jetzt nicht mehr die Umgebung um es konkret zu testen, aber die Kompilierung war fehlerfrei!
Vielen Dank für deine Hilfe, falls jetzt noch was schief läuft würd ich mich nochmal melden.
Bis denn, Felsti
-
Mit einfachem Castens ist's da nicht getan: PWSTR ist ein Pointer auf einen Unicode-String.
Windows stellt aber netterweise Funktion zum Umwandeln zur Verfügung:
MultiByteToWideChar
CP_ACP als Codepage sollte ausreichen, die restlichen Parameter sind relativ klar.
-
Hallo nochmal,
mein Code sieht jetzt folgendermaßen aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12
char *input; cout<<"Namen eingeben:\n"; cin>>input; PWSTR wszGroupID3; MultiByteToWideChar(CP_ACP, 0, input, -1, wszGroupID3, 0); hr = DRMCreateUser( wszGroupID3, NULL, L"Windows", &hUser2 );
jedoch ist das Ergebnis ähnlich dem einfach casten, denn es wird jetzt ein lustiger Wert wie "汢䁡摳晫搮e@testserver.local" oder gar nur Kästchen in die Funktion übergeben. Was ist denn da jetzt wieder falsch gelaufen?
Grüße, FelstiGeändert von Felsti (02.05.05 um 13:49 Uhr)
-
Ein PWSTR ist ein Pointer auf einen WSTR. Da du den nirgendwo hinzeigen lässt, geht das in die Hose.
Mach ein WSTR[200]:
WSTR wszGroupID3[200];
Dann müsste der Compiler auch wszGroupID3 als Parameter für die beiden Funktionen zulassen.
-
So langsam bin ich am verzweifeln, denn wenn ich WSTR wszGroupID3[200]; eintrage, dann bekomme ich beim kompilieren "WSTR: nichtdeklarierter Bezeichner".
Wie schon eingangs erwähnt habe ich nicht viele Kenntnisse in C++ und versteh echt nur noch Bahnhof. Das Programmstück sollte jetzt schon vor Tagen fertig sein und ich komm nicht von der Stelle
Gibts vielleicht irgendwo ne gute Dokumentation darüber was überhaupt WSTR und PWSTR genau sind und wie sie funktionieren?
-
ach flixt, mach aus WSTR ein WORD bzw. wenn möglich wchar_t. Ansonsten ein unsigned short int.
Die MSDN sollte die Typen beschreiben können (http://msdn.microsoft.com)
-
So, als Nachtrag wie der richtige Code gelautet hätte
Code :1 2 3 4 5
PWSTR input; cout<<"Usernamen eingeben:\n"; wscanf( L"%ls", input); PWSTR wszGroupID2 = input; wprintf( L"%s\n", wszGroupID2);
...manchmal ist es einfacher als man denkt, denn wscanf und wprintf waren die Lösung
Ich danke trotzdem für die nette Unterstützung!
-
19.05.05 09:59 #14
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Warum liesst du nciht gleich in wszGroupID2 ein?
Ist doch Speicherverschwendung wie du es machst.
mfg
umbrasaxum
-
Initialisierst du den Pointer irgendwo auf einen gültigen Bereich? Wenn nicht, dann hast du wahnsinnig viel Glück und das Ding explodiert dir dann, wenn du es am wenigsten erwartest. Ändere es zumindest so ab:
Code :1 2 3 4 5 6
WCHAR wInput[200]; PWSTR input = &wInput; cout<<"Usernamen eingeben:\n"; wscanf( L"%ls", input); PWSTR wszGroupID2 = input; wprintf( L"%s\n", wszGroupID2);
Ähnliche Themen
-
Ant Benutzereingabe
Von Eichi im Forum Java GrundlagenAntworten: 1Letzter Beitrag: 21.01.11, 13:11 -
concat PWSTR und Strings
Von StehtimSchilf im Forum C/C++Antworten: 10Letzter Beitrag: 06.05.10, 18:13 -
PWSTR nach jstring konvertieren?
Von zu1u im Forum C/C++Antworten: 4Letzter Beitrag: 14.05.09, 23:05 -
Benutzereingabe in Textfeld tun
Von i-mehl im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 29.02.04, 12:09 -
Benutzereingabe
Von gEr|Steven im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 18.04.02, 19:19





Zitieren
Login






