fpexif: Fix compilation with Delphi

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8995 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-10-28 23:37:19 +00:00
parent ab61bf4bb9
commit 49849cc193
12 changed files with 64 additions and 39 deletions

View File

@ -7,7 +7,7 @@
<TargetedPlatforms>3</TargetedPlatforms> <TargetedPlatforms>3</TargetedPlatforms>
<AppType>Application</AppType> <AppType>Application</AppType>
<FrameworkType>VCL</FrameworkType> <FrameworkType>VCL</FrameworkType>
<ProjectVersion>18.8</ProjectVersion> <ProjectVersion>19.5</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform> <Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
@ -134,13 +134,9 @@
<DelphiCompile Include="$(MainSource)"> <DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource> <MainSource>MainSource</MainSource>
</DelphiCompile> </DelphiCompile>
<DCCReference Include="mdvmain.pas"> <DCCReference Include="mdvMain.pas">
<Form>Form1</Form> <Form>Form1</Form>
</DCCReference> </DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base"> <BuildConfiguration Include="Base">
<Key>Base</Key> <Key>Base</Key>
</BuildConfiguration> </BuildConfiguration>
@ -148,6 +144,10 @@
<Key>Cfg_1</Key> <Key>Cfg_1</Key>
<CfgParent>Base</CfgParent> <CfgParent>Base</CfgParent>
</BuildConfiguration> </BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup> </ItemGroup>
<ProjectExtensions> <ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality> <Borland.Personality>Delphi.Personality.12</Borland.Personality>

View File

@ -1,4 +1,4 @@
unit fpeExifData; unit fpeExifData;
{$IFDEF FPC} {$IFDEF FPC}
//{$mode objfpc}{$H+} //{$mode objfpc}{$H+}
@ -1519,7 +1519,7 @@ end;
procedure TGPSPositionTag.SetAsFloat(const AValue: Double); procedure TGPSPositionTag.SetAsFloat(const AValue: Double);
var var
arr: TExifDoubleArray = nil; arr: TExifDoubleArray{$IFDEF FPC} = nil{$ENDIF};
begin begin
SetLength(arr, 3); SetLength(arr, 3);
SplitGps(AValue, arr[0], arr[1], arr[2]); SplitGps(AValue, arr[0], arr[1], arr[2]);
@ -1758,8 +1758,8 @@ end;
function TUserCommentTag.GetAsString: String; function TUserCommentTag.GetAsString: String;
var var
sw: WideString = ''; sw: WideString{$IFDEF FPC} = ''{$ENDIF};
sa: AnsiString = ''; sa: AnsiString{$IFDEF FPC} = ''{$ENDIF};
begin begin
Result := ''; Result := '';
@ -1851,7 +1851,7 @@ end;
function TXPTag.GetAsString: String; function TXPTag.GetAsString: String;
var var
ws: WideString = ''; ws: WideString{$IFDEF FPC} = ''{$ENDIF};
begin begin
SetLength(ws, Length(FRawData) div SizeOf(WideChar)); SetLength(ws, Length(FRawData) div SizeOf(WideChar));
Move(FRawData[0], ws[1], Length(FRawData)); Move(FRawData[0], ws[1], Length(FRawData));

View File

@ -8,8 +8,9 @@ unit fpeExifReadWrite;
{$IFDEF FPC} {$IFDEF FPC}
{$MODE Delphi} {$MODE Delphi}
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
{$ENDIF} {$ENDIF}
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
{$INCLUDE fpexif.inc} {$INCLUDE fpexif.inc}
interface interface

View File

@ -121,7 +121,7 @@ var
len: DWord; len: DWord;
tagdef: TTagDef; tagdef: TTagDef;
tagID: TTagID; tagID: TTagID;
s: String = ''; s: String{$IFDEF FPC} = ''{$ENDIF};
w: Word; w: Word;
{$IFNDEF FPC} {$IFNDEF FPC}
sa: ansistring; sa: ansistring;
@ -247,7 +247,7 @@ procedure TIptcReader.ReadImageResourceBlock(AStream: TStream;
out AID: Word; out AName: String; out AData: TBytes); out AID: Word; out AName: String; out AData: TBytes);
var var
len: Byte; len: Byte;
s: Ansistring = ''; s: Ansistring{$IFDEF FPC} = ''{$ENDIF};
lSize: DWord; lSize: DWord;
begin begin
AID := BEtoN(ReadWord(AStream)); AID := BEtoN(ReadWord(AStream));
@ -328,10 +328,10 @@ end;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
function TIptcWriter.SplitMultiStringTag(ATag: TTag): TStringArray; function TIptcWriter.SplitMultiStringTag(ATag: TTag): TStringArray;
var var
s: String; s: AnsiString;
begin begin
s := PChar(ATag.RawData); s := StrPas(PAnsiChar(ATag.RawData));
Result := s.Split(IPTC_MULTI_TAG_SEPARATOR); Result := Split(s, IPTC_MULTI_TAG_SEPARATOR);
end; end;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@ -122,7 +122,7 @@ function TCanonMakerNoteReader.AddTag(AStream: TStream;
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer; const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
var var
tagDef: TTagDef; tagDef: TTagDef;
w: array of Word = nil; w: array of Word{$IFDEF FPC} = nil{$ENDIF};
n,i: Integer; n,i: Integer;
t: TTagID; t: TTagID;
begin begin

View File

@ -1,4 +1,4 @@
unit fpeMakerNoteMinolta; unit fpeMakerNoteMinolta;
{$IFDEF FPC} {$IFDEF FPC}
//{$mode objfpc}{$H+} //{$mode objfpc}{$H+}
@ -133,7 +133,7 @@ function TMinoltaMakerNoteReader.AddTag(AStream: TStream;
const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer; const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer;
var var
tagDef: TTagDef; tagDef: TTagDef;
v: array of DWord = nil; v: array of DWord{$IFDEF FPC} = nil{$ENDIF};
n, i: Integer; n, i: Integer;
t: TTagID; t: TTagID;
d: Integer; d: Integer;

View File

@ -339,8 +339,8 @@ end;
procedure TNikonMakerNoteReader.GetTagDefs(AStream: TStream); procedure TNikonMakerNoteReader.GetTagDefs(AStream: TStream);
var var
b: TBytes = nil; //array of byte; b: TBytes{$IFDEF FPC} = nil{$ENDIF};
tmp: String = ''; tmp: String{$IFDEF FPC} = ''{$ENDIF};
tmp2: String; tmp2: String;
p: Integer; p: Integer;
streamPos: Int64; streamPos: Int64;
@ -376,7 +376,7 @@ end;
function TNikonMakerNoteReader.Prepare(AStream: TStream): Boolean; function TNikonMakerNoteReader.Prepare(AStream: TStream): Boolean;
var var
b: TBytes = nil; b: TBytes{$IFDEF FPC} = nil{$ENDIF};
UCMake: String; UCMake: String;
dw: DWord; dw: DWord;
begin begin

View File

@ -1,4 +1,4 @@
unit fpeMakerNoteOlympus; unit fpeMakerNoteOlympus;
{$IFDEF FPC} {$IFDEF FPC}
{$MODE DELPHI} {$MODE DELPHI}
@ -458,7 +458,7 @@ const
SIGNATURE_V3I = 'OLYMPUS'#00'II'#03#00; SIGNATURE_V3I = 'OLYMPUS'#00'II'#03#00;
SIGNATURE_V3M = 'OLYMPUS'#00'MM'#03#00; SIGNATURE_V3M = 'OLYMPUS'#00'MM'#03#00;
var var
hdr: TBytes = nil; //array of byte; hdr: TBytes{$IFDEF FPC} = nil{$ENDIF};
p: Int64; p: Int64;
begin begin
p := AStream.Position; p := AStream.Position;

View File

@ -14,7 +14,10 @@ uses
LazUTF8, LazUTF8,
{$ENDIF} {$ENDIF}
fpeGlobal, fpeGlobal,
fpeExifData, fpeIptcData, fpeXmpData; {$IFDEF FPC}
fpeXmpData,
{$ENDIF}
fpeExifData, fpeIptcData;
type type
TImgInfo = class; TImgInfo = class;
@ -64,7 +67,9 @@ type
private private
FExifData: TExifData; FExifData: TExifData;
FIptcData: TIptcData; FIptcData: TIptcData;
{$IFDEF FPC}
FXmpData: TXmpData; FXmpData: TXmpData;
{$ENDIF}
function GetComment: String; function GetComment: String;
function GetWarnings: String; function GetWarnings: String;
procedure SetComment(const AValue: String); procedure SetComment(const AValue: String);
@ -87,14 +92,18 @@ type
function CreateExifData(ABigEndian: Boolean = false): TExifData; function CreateExifData(ABigEndian: Boolean = false): TExifData;
function CreateIptcData: TIptcData; function CreateIptcData: TIptcData;
{$IFDEF FPC}
function CreateXmpData: TXmpData; function CreateXmpData: TXmpData;
{$ENDIF}
function HasComment: Boolean; function HasComment: Boolean;
function HasExif: Boolean; function HasExif: Boolean;
function HasIptc: Boolean; function HasIptc: Boolean;
function HasThumbnail: Boolean; function HasThumbnail: Boolean;
function HasWarnings: boolean; function HasWarnings: boolean;
{$IFDEF FPC}
function HasXMP: Boolean; function HasXMP: Boolean;
{$ENDIF}
{ Comment stored in the Jpeg COM segment } { Comment stored in the Jpeg COM segment }
property Comment: String read GetComment write SetComment; property Comment: String read GetComment write SetComment;
@ -119,7 +128,9 @@ type
property ExifData: TExifData read FExifData; property ExifData: TExifData read FExifData;
property IptcData: TIptcData read FIptcData; property IptcData: TIptcData read FIptcData;
{$IFDEF FPC}
property XmpData: TXmpData read FXmpData; property XmpData: TXmpData read FXmpData;
{$ENDIF}
end; end;
@ -127,7 +138,8 @@ implementation
uses uses
Variants, Variants,
fpeStrConsts, fpeUtils, fpeExifReadWrite, fpeXMPReadWrite, fpeIptcReadWrite; fpeStrConsts, fpeUtils, fpeExifReadWrite, {$IFDEF FPC}fpeXMPReadWrite,{$ENDIF}
fpeIptcReadWrite;
type type
TJpegJFIFSegment = packed record TJpegJFIFSegment = packed record
@ -264,7 +276,9 @@ begin
FWarnings.Free; FWarnings.Free;
FExifData.Free; FExifData.Free;
FIptcData.Free; FIptcData.Free;
{$IFDEF FPC}
FXmpData.Free; FXmpData.Free;
{$ENDIF}
inherited; inherited;
end; end;
@ -284,6 +298,7 @@ begin
Result := FIptcData; Result := FIptcData;
end; end;
{$IFDEF FPC}
function TImgInfo.CreateXmpData: TXmpData; function TImgInfo.CreateXmpData: TXmpData;
begin begin
FWarnings.Clear; FWarnings.Clear;
@ -291,6 +306,7 @@ begin
FXmpData := TXmpData.Create; FXmpData := TXmpData.Create;
Result := FXmpData; Result := FXmpData;
end; end;
{$ENDIF}
procedure TImgInfo.Error(const AMsg: String); procedure TImgInfo.Error(const AMsg: String);
begin begin
@ -365,10 +381,12 @@ begin
Result := FWarnings.Count > 0; Result := FWarnings.Count > 0;
end; end;
{$IFDEF FPC}
function TImgInfo.HasXMP: Boolean; function TImgInfo.HasXMP: Boolean;
begin begin
Result := FXmpData <> nil; Result := FXmpData <> nil;
end; end;
{$ENDIF}
procedure TImgInfo.LoadFromFile(const AFileName: String); procedure TImgInfo.LoadFromFile(const AFileName: String);
var var
@ -522,8 +540,8 @@ var
p: Int64; p: Int64;
reader: TBasicMetadataReader; reader: TBasicMetadataReader;
bigEndian: Boolean; bigEndian: Boolean;
buf: TBytes = nil; buf: TBytes{$IFDEF FPC} = nil{$ENDIF};
hdr: TBytes = nil; hdr: TBytes{$IFDEF FPC} = nil{$ENDIF};
hasJFIF: Boolean; hasJFIF: Boolean;
{$IFNDEF FPC} {$IFNDEF FPC}
sa: ansistring; sa: ansistring;
@ -570,6 +588,7 @@ begin
finally finally
reader.Free; reader.Free;
end; end;
{$IFDEF FPC}
end else end else
if HasXMPHeader(AStream) and (mdkXMP in FMetadataKinds) then if HasXMPHeader(AStream) and (mdkXMP in FMetadataKinds) then
begin begin
@ -583,6 +602,7 @@ begin
raise EFpExifReader.Create('Error reading XMP data: ' + E.Message); raise EFpExifReader.Create('Error reading XMP data: ' + E.Message);
end; end;
end; end;
{$ENDIF}
end; end;
end; end;
M_IPTC: M_IPTC:
@ -821,7 +841,8 @@ begin
writer.Free; writer.Free;
end; end;
end; end;
{$IFDEF FPC}
// XMP --> Write another APP1 segment // XMP --> Write another APP1 segment
if (mdkXMP in FMetadataKinds) and HasXMP then if (mdkXMP in FMetadataKinds) and HasXMP then
begin begin
@ -832,6 +853,7 @@ begin
writer.Free; writer.Free;
end; end;
end; end;
{$ENDIF}
// Write IPTCSegment (APP13) // Write IPTCSegment (APP13)
if (mdkIPTC in FMetadataKinds) and HasIPTC then begin if (mdkIPTC in FMetadataKinds) and HasIPTC then begin

View File

@ -922,8 +922,8 @@ var
intVal: Integer; intVal: Integer;
i: Integer; i: Integer;
s: String; s: String;
fmtStr: TStringArray = nil; fmtStr: TStringArray{$IFDEF FPC} = nil{$ENDIF};
lkup: TStringArray = nil; lkup: TStringArray{$IFDEF FPC} = nil{$ENDIF};
len: Integer; len: Integer;
begin begin
Result := ''; Result := '';
@ -1044,7 +1044,7 @@ procedure TIntegerTag.SetAsString(const AValue: String);
var var
i, j, n: Integer; i, j, n: Integer;
s: String; s: String;
intArr: TExifIntegerArray = nil; intArr: TExifIntegerArray{$IFDEF FPC} = nil{$ENDIF};
begin begin
if AValue = '' then begin if AValue = '' then begin
SetLength(FRawData, 0); SetLength(FRawData, 0);
@ -1227,7 +1227,7 @@ var
i: Integer; i: Integer;
s: String; s: String;
fval: Double; fval: Double;
fmtStr: TStringArray = nil; fmtStr: TStringArray{$IFDEF FPC} = nil{$ENDIF};
begin begin
{ Extract format string for each value. A simple format string is applied to { Extract format string for each value. A simple format string is applied to
all values. Inidividual format strings can be separated by '|'. } all values. Inidividual format strings can be separated by '|'. }
@ -1438,7 +1438,7 @@ procedure TFloatTag.SetAsString(const AValue: String);
var var
i, j, n: Integer; i, j, n: Integer;
s: String; s: String;
floatArr: TExifDoubleArray = nil; floatArr: TExifDoubleArray{$IFDEF FPC} = nil{$ENDIF};
begin begin
if AValue = '' then begin if AValue = '' then begin
SetLength(FRawData, 0); SetLength(FRawData, 0);
@ -1498,7 +1498,7 @@ end;
function TStringTag.GetAsString: String; function TStringTag.GetAsString: String;
var var
sa: ansistring = ''; sa: ansistring{$IFDEF FPC} = ''{$ENDIF};
begin begin
// FIXME: The next lines assume that FValue stores a string as ansistring // FIXME: The next lines assume that FValue stores a string as ansistring
// which is true only for Exif, probably not for IPTC and XMP. // which is true only for Exif, probably not for IPTC and XMP.

View File

@ -1,4 +1,4 @@
unit fpeUtils; unit fpeUtils;
{$IFDEF FPC} {$IFDEF FPC}
{$mode ObjFPC}{$H+} {$mode ObjFPC}{$H+}
@ -39,7 +39,7 @@ type
property Items[AIndex: Integer]: Int64 read GetItem write SetItem; default; property Items[AIndex: Integer]: Int64 read GetItem write SetItem; default;
end; end;
TStringArray = array of string; TStringArray = array of ansistring;
{$ENDIF} {$ENDIF}
// Big endian/little endian utilities // Big endian/little endian utilities
@ -498,7 +498,7 @@ var
mins, secs: Double; mins, secs: Double;
i, j, len: Integer; i, j, len: Integer;
n: Integer; n: Integer;
s: String = ''; s: String{$IFDEF FPC} = ''{$ENDIF};
res: Integer; res: Integer;
begin begin
Result := false; Result := false;

View File

@ -10,7 +10,9 @@
unit fpeXMPData; unit fpeXMPData;
{$IFDEF FPC}
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
{$ENDIF}
interface interface