Erstmal würde ich es in eine eigene Unite verlegen,
dann sollte dich Delphi über die eventuell uninitialisierten Variablen verwarnt haben.
Delphi-Quellcode:
function GetSFString: String;
var
hSFMemory: HWND;
SfAreaPtr: PAnsiChar;
begin
hSFMemory := 0;
SfAreaPtr := nil;
try
hSFMemory := OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM');
if HSFMemory <> 0 then begin
SfAreaPtr := MapViewOfFile(hSFMemory, FILE_MAP_READ, 0, 0, 0);
Result := SfAreaPtr;
end else
Result := '';
finally
UnmapViewOfFile(SfAreaPtr);
CloseHandle(hSFMemory);
end;
end;
Außerdem willst du den Speicherbereich als Text auslesen, was wohl (laut dem Beispiel) nicht stimmt,
schau dir das Beispiel nochmal genau an, such den Record (also den Aufbau der Daten in diesem Speicherbereich) raus und greife über diesen Record auf die Daten zu.
Delphi-Quellcode:
function GetSFString: ...;
var
hSFMemory: HWND;
SfAreaPtr: PSFRawMemMap;
begin
hSFMemory := 0;
SfAreaPtr := nil;
try
hSFMemory := OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM');
if HSFMemory <> 0 then begin
SfAreaPtr := MapViewOfFile(hSFMemory, FILE_MAP_READ, 0, 0, 0);
... // SfAreaPtr^.irgendwas
end else
...;
finally
UnmapViewOfFile(SfAreaPtr);
CloseHandle(hSFMemory);
end;
end;
[add]
@p80286: jupp, hab ich ... zumindestens etwas genauer überflogen