k***@gmail.com
2018-02-06 18:18:54 UTC
Hallo,
Ich stehe gerade auf'm Schlauch und sehe den Wald vor lauter Bäumen nicht mehr. Ich migriere ein D5-Projekt zu Delphi 10.2 Starter (Tokyo), zu Unicode.
In der ItemProp-Unit von Brad Stowers wird die Funktion GetCommandString (vom ContextMenu) verwendet. Hier wird der Funktion eine Variable vom Typ PAnsiChar übergeben, in der dann ein String zurückgegeben wird. Das MSDN sagt ausdrücklich, dass im Falle von UniCode-Verwendung dieser Funktion ebenso ein PAnsiChar verwendet werden soll, und man den danach typecasten soll(*). Einen anderen Parameter als einen PAnsiChar akteptiert die Funktion auch gar nicht. So weit, so gut.
Nun rufe ich die Funktion auf:
[...]
var Name: AnsiString;
[...]
SetLength(Name, MAX_PATH);
Name[1] := #0;
GetCommandString(DWParam.Lo - CMD_ID_OFFSET, GCS_VERBW, NIL, PAnsiChar(Name), MAX_PATH);
Jetzt habe ich in "Name" (dem AnsiString) einen Unicode-String. Zu erkennen daran, dass der Debugger als Inhalt anzeigt: "F#0o#0o#0B#0a#0r#0"
Wie kann ich jetzt diesen AnsiString in einen normalen Delphi-(Unicode)String umwandeln, um ihn dann weiterzuverwenden? Ich verrenne mich gerade total - meine Versuche bisher ergaben alle einen String mit Inhalt 'F#0o#0o#0B#0a#0r#0' (er wird also nicht als Unicode interpretiert)
Danke für einen Denkanstoß, und Grüße,
KT
*) https://msdn.microsoft.com/de-de/library/windows/desktop/bb776094(v=vs.85).aspx
"Even though pszName is declared as an LPSTR, you must cast it to UINT_PTR and return a Unicode string if uFlags is set to either GCS_HELPTEXTW or GCS_VERBW."
Ich stehe gerade auf'm Schlauch und sehe den Wald vor lauter Bäumen nicht mehr. Ich migriere ein D5-Projekt zu Delphi 10.2 Starter (Tokyo), zu Unicode.
In der ItemProp-Unit von Brad Stowers wird die Funktion GetCommandString (vom ContextMenu) verwendet. Hier wird der Funktion eine Variable vom Typ PAnsiChar übergeben, in der dann ein String zurückgegeben wird. Das MSDN sagt ausdrücklich, dass im Falle von UniCode-Verwendung dieser Funktion ebenso ein PAnsiChar verwendet werden soll, und man den danach typecasten soll(*). Einen anderen Parameter als einen PAnsiChar akteptiert die Funktion auch gar nicht. So weit, so gut.
Nun rufe ich die Funktion auf:
[...]
var Name: AnsiString;
[...]
SetLength(Name, MAX_PATH);
Name[1] := #0;
GetCommandString(DWParam.Lo - CMD_ID_OFFSET, GCS_VERBW, NIL, PAnsiChar(Name), MAX_PATH);
Jetzt habe ich in "Name" (dem AnsiString) einen Unicode-String. Zu erkennen daran, dass der Debugger als Inhalt anzeigt: "F#0o#0o#0B#0a#0r#0"
Wie kann ich jetzt diesen AnsiString in einen normalen Delphi-(Unicode)String umwandeln, um ihn dann weiterzuverwenden? Ich verrenne mich gerade total - meine Versuche bisher ergaben alle einen String mit Inhalt 'F#0o#0o#0B#0a#0r#0' (er wird also nicht als Unicode interpretiert)
Danke für einen Denkanstoß, und Grüße,
KT
*) https://msdn.microsoft.com/de-de/library/windows/desktop/bb776094(v=vs.85).aspx
"Even though pszName is declared as an LPSTR, you must cast it to UINT_PTR and return a Unicode string if uFlags is set to either GCS_HELPTEXTW or GCS_VERBW."