ich wollte ein "TFileStreamUTF8" erzeugen, dazu habe ich folgenden Code aus den Lazarus Sourcen kopiert und entsprechend abgeändert:
Code: Alles auswählen
Interface
Type
TFileStreamUTF8 = class(THandleStream)
Private
FFileName : String;
public
constructor Create(const AFileName: string; Mode: Word);
constructor Create(const AFileName: string; Mode: Word; Rights: Cardinal);
destructor Destroy; override;
property FileName : String Read FFilename;
end;
const // Baucht es sonst nicht kompilierbar:
AccessMode: array[0..2] of Cardinal = (
GENERIC_READ,
GENERIC_WRITE,
GENERIC_READ or GENERIC_WRITE);
ShareModes: array[0..4] of Integer = (
0,
0,
FILE_SHARE_READ,
FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE);
ResourceString
SFCreateError = 'Unable to create file "%s"';
SFOpenError = 'Unable to open file "%s"';
implementation
Function FileOpenUTF8 (Const FileName : string; Mode : Integer) : THandle;
begin
result := CreateFileW(PWideChar(UTF8Decode(FileName)), dword(AccessMode[Mode and 3]),
dword(ShareModes[(Mode and $F0) shr 4]), nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
end;
Function FileCreateUTF8 (Const FileName : String; ShareMode : Integer; Rights : Integer) : THandle;
begin
FileCreateUTF8 := CreateFileW(PWideChar(UTF8Decode(FileName)), GENERIC_READ or GENERIC_WRITE,
dword(ShareModes[(ShareMode and $F0) shr 4]), nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
end;
{****************************************************************************}
{* TFileStreamUTF8 *}
{****************************************************************************}
constructor TFileStreamUTF8.Create(const AFileName: string; Mode: Word);
begin
FFileName:=AFileName;
If (Mode and fmCreate) > 0 then
FHandle:=FileCreateUTF8(AFileName,Mode,438)
else
FHAndle:=FileOpenUTF8(AFileName,Mode);
If (THandle(FHandle)=feInvalidHandle) then
If Mode=fmcreate then
raise EFCreateError.createfmt(SFCreateError,[AFileName])
else
raise EFOpenError.Createfmt(SFOpenError,[AFilename]);
end;
constructor TFileStreamUTF8.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
begin
FFileName:=AFileName;
If (Mode and fmCreate) > 0 then
FHandle:=FileCreateUTF8(AFileName,Mode,Rights)
else
FHAndle:=FileOpenUTF8(AFileName,Mode);
If (THandle(FHandle)=feInvalidHandle) then
If Mode=fmcreate then
raise EFCreateError.createfmt(SFCreateError,[AFileName])
else
raise EFOpenError.Createfmt(SFOpenError,[AFilename]);
end;
destructor TFileStreamUTF8.Destroy;
begin
FileClose(FHandle);
end;
Kann mir bitte jemand einen Tipp geben warum mein Code sich nicht kompilieren lässt

Vielen Dank im Voraus, Gruß Markus.