Kurze Frage zu OpenFileMappingW und LPCWSTR

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
laz847
Beiträge: 114
Registriert: Mi 18. Jun 2014, 16:39

Kurze Frage zu OpenFileMappingW und LPCWSTR

Beitrag von laz847 »

Hallo,

ich habe da noch eine Stelle im Code, bei der ich unsicher bin, ob das so ok ist.
function OpenFileMappingW(dwDesiredAccess:DWORD; bInheritHandle:WINBOOL; lpName:LPCWSTR):HANDLE; external 'kernel32' name 'OpenFileMappingW';
Ich muss OpenFileMappingW() verwenden und den Namen der MAP (LPCWSTR) zur Laufzeit aus Strings bzw. ShortStrings zusammensetzen.

Aktuell mache ich das so :

sym : ShortString;

mapName : String;

sym := 'test123';

mapName := 'MAP_'+sym+'_DOT';

OpenFileMappingW(FILE_MAP_READ,False,PWideChar(WideString(mapName)));

Mir gehts jetzt um das "PWideChar(WideString(mapName))", ist das ok so oder können da Probleme entstehen?

Vielen Dank :wink: !

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Kurze Frage zu OpenFileMappingW und LPCWSTR

Beitrag von Socke »

An sich sollte die automatische Konvertierung ebenso gut wie mein Beispiel unten funktionieren. Probleme können insbesondere dann entstehen, wenn der String in sym eine unerwartete Zeichenkodierung verwendet. Ich würde daher die Zeichenkodierung festlegen und mit UTF8Decode() umwandeln.

Hier das Beispiel

Code: Alles auswählen

var
  sym      : UTF8String;
  mapName  : WideString;
begin
  sym      := 'test123';  // MUSS in UTF-8 kodiert sein! z.B. aus der LCL
  mapName  := UTF8Decode('MAP_'+sym+'_DOT');
 
  OpenFileMappingW(FILE_MAP_READ,False,@mapName[1]);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten