Benutzereingabe in PWSTR speichern?

Felsti

Mitglied
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
 
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:
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.
 
Zuletzt bearbeitet:
moin


Und wenn du das so machst:
Code:
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)
 
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:
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? :rolleyes:

Grüße, Felsti
 
Zuletzt bearbeitet:
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.
 
Zurück