From 49849cc19301b2bc2dc5d6003185983e6a0b9f74 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 28 Oct 2023 23:37:19 +0000 Subject: [PATCH] fpexif: Fix compilation with Delphi git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8995 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../metadata_viewer/MetadataViewer.dproj | 12 +++---- components/fpexif/fpeexifdata.pas | 10 +++--- components/fpexif/fpeexifreadwrite.pas | 3 +- components/fpexif/fpeiptcreadwrite.pas | 10 +++--- components/fpexif/fpemakernotecanon.pas | 2 +- components/fpexif/fpemakernoteminolta.pas | 4 +-- components/fpexif/fpemakernotenikon.pas | 6 ++-- components/fpexif/fpemakernoteolympus.pas | 4 +-- components/fpexif/fpemetadata.pas | 32 ++++++++++++++++--- components/fpexif/fpetags.pas | 12 +++---- components/fpexif/fpeutils.pas | 6 ++-- components/fpexif/fpexmpdata.pas | 2 ++ 12 files changed, 64 insertions(+), 39 deletions(-) diff --git a/components/fpexif/delphi examples/metadata_viewer/MetadataViewer.dproj b/components/fpexif/delphi examples/metadata_viewer/MetadataViewer.dproj index 5b7348e35..88970633f 100644 --- a/components/fpexif/delphi examples/metadata_viewer/MetadataViewer.dproj +++ b/components/fpexif/delphi examples/metadata_viewer/MetadataViewer.dproj @@ -7,7 +7,7 @@ 3 Application VCL - 18.8 + 19.5 Win32 @@ -134,13 +134,9 @@ MainSource - +
Form1
- - Cfg_2 - Base - Base @@ -148,6 +144,10 @@ Cfg_1 Base + + Cfg_2 + Base + Delphi.Personality.12 diff --git a/components/fpexif/fpeexifdata.pas b/components/fpexif/fpeexifdata.pas index 38379c3e1..b8899b820 100644 --- a/components/fpexif/fpeexifdata.pas +++ b/components/fpexif/fpeexifdata.pas @@ -1,4 +1,4 @@ -unit fpeExifData; +unit fpeExifData; {$IFDEF FPC} //{$mode objfpc}{$H+} @@ -1519,7 +1519,7 @@ end; procedure TGPSPositionTag.SetAsFloat(const AValue: Double); var - arr: TExifDoubleArray = nil; + arr: TExifDoubleArray{$IFDEF FPC} = nil{$ENDIF}; begin SetLength(arr, 3); SplitGps(AValue, arr[0], arr[1], arr[2]); @@ -1758,8 +1758,8 @@ end; function TUserCommentTag.GetAsString: String; var - sw: WideString = ''; - sa: AnsiString = ''; + sw: WideString{$IFDEF FPC} = ''{$ENDIF}; + sa: AnsiString{$IFDEF FPC} = ''{$ENDIF}; begin Result := ''; @@ -1851,7 +1851,7 @@ end; function TXPTag.GetAsString: String; var - ws: WideString = ''; + ws: WideString{$IFDEF FPC} = ''{$ENDIF}; begin SetLength(ws, Length(FRawData) div SizeOf(WideChar)); Move(FRawData[0], ws[1], Length(FRawData)); diff --git a/components/fpexif/fpeexifreadwrite.pas b/components/fpexif/fpeexifreadwrite.pas index 484f8e555..cb3ab3fc8 100644 --- a/components/fpexif/fpeexifreadwrite.pas +++ b/components/fpexif/fpeexifreadwrite.pas @@ -8,8 +8,9 @@ unit fpeExifReadWrite; {$IFDEF FPC} {$MODE Delphi} + {$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} {$ENDIF} -{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined} + {$INCLUDE fpexif.inc} interface diff --git a/components/fpexif/fpeiptcreadwrite.pas b/components/fpexif/fpeiptcreadwrite.pas index f80df41a2..6a671a2af 100644 --- a/components/fpexif/fpeiptcreadwrite.pas +++ b/components/fpexif/fpeiptcreadwrite.pas @@ -121,7 +121,7 @@ var len: DWord; tagdef: TTagDef; tagID: TTagID; - s: String = ''; + s: String{$IFDEF FPC} = ''{$ENDIF}; w: Word; {$IFNDEF FPC} sa: ansistring; @@ -247,7 +247,7 @@ procedure TIptcReader.ReadImageResourceBlock(AStream: TStream; out AID: Word; out AName: String; out AData: TBytes); var len: Byte; - s: Ansistring = ''; + s: Ansistring{$IFDEF FPC} = ''{$ENDIF}; lSize: DWord; begin AID := BEtoN(ReadWord(AStream)); @@ -328,10 +328,10 @@ end; //------------------------------------------------------------------------------ function TIptcWriter.SplitMultiStringTag(ATag: TTag): TStringArray; var - s: String; + s: AnsiString; begin - s := PChar(ATag.RawData); - Result := s.Split(IPTC_MULTI_TAG_SEPARATOR); + s := StrPas(PAnsiChar(ATag.RawData)); + Result := Split(s, IPTC_MULTI_TAG_SEPARATOR); end; //------------------------------------------------------------------------------ diff --git a/components/fpexif/fpemakernotecanon.pas b/components/fpexif/fpemakernotecanon.pas index 8206c6e61..fdd30b482 100644 --- a/components/fpexif/fpemakernotecanon.pas +++ b/components/fpexif/fpemakernotecanon.pas @@ -122,7 +122,7 @@ function TCanonMakerNoteReader.AddTag(AStream: TStream; const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer; var tagDef: TTagDef; - w: array of Word = nil; + w: array of Word{$IFDEF FPC} = nil{$ENDIF}; n,i: Integer; t: TTagID; begin diff --git a/components/fpexif/fpemakernoteminolta.pas b/components/fpexif/fpemakernoteminolta.pas index d1444aeed..7ca19bb80 100644 --- a/components/fpexif/fpemakernoteminolta.pas +++ b/components/fpexif/fpemakernoteminolta.pas @@ -1,4 +1,4 @@ -unit fpeMakerNoteMinolta; +unit fpeMakerNoteMinolta; {$IFDEF FPC} //{$mode objfpc}{$H+} @@ -133,7 +133,7 @@ function TMinoltaMakerNoteReader.AddTag(AStream: TStream; const AIFDRecord: TIFDRecord; const AData: TBytes; AParent: TTagID): Integer; var tagDef: TTagDef; - v: array of DWord = nil; + v: array of DWord{$IFDEF FPC} = nil{$ENDIF}; n, i: Integer; t: TTagID; d: Integer; diff --git a/components/fpexif/fpemakernotenikon.pas b/components/fpexif/fpemakernotenikon.pas index db582f500..7b483a1c0 100644 --- a/components/fpexif/fpemakernotenikon.pas +++ b/components/fpexif/fpemakernotenikon.pas @@ -339,8 +339,8 @@ end; procedure TNikonMakerNoteReader.GetTagDefs(AStream: TStream); var - b: TBytes = nil; //array of byte; - tmp: String = ''; + b: TBytes{$IFDEF FPC} = nil{$ENDIF}; + tmp: String{$IFDEF FPC} = ''{$ENDIF}; tmp2: String; p: Integer; streamPos: Int64; @@ -376,7 +376,7 @@ end; function TNikonMakerNoteReader.Prepare(AStream: TStream): Boolean; var - b: TBytes = nil; + b: TBytes{$IFDEF FPC} = nil{$ENDIF}; UCMake: String; dw: DWord; begin diff --git a/components/fpexif/fpemakernoteolympus.pas b/components/fpexif/fpemakernoteolympus.pas index 178069bca..f70f58414 100644 --- a/components/fpexif/fpemakernoteolympus.pas +++ b/components/fpexif/fpemakernoteolympus.pas @@ -1,4 +1,4 @@ -unit fpeMakerNoteOlympus; +unit fpeMakerNoteOlympus; {$IFDEF FPC} {$MODE DELPHI} @@ -458,7 +458,7 @@ const SIGNATURE_V3I = 'OLYMPUS'#00'II'#03#00; SIGNATURE_V3M = 'OLYMPUS'#00'MM'#03#00; var - hdr: TBytes = nil; //array of byte; + hdr: TBytes{$IFDEF FPC} = nil{$ENDIF}; p: Int64; begin p := AStream.Position; diff --git a/components/fpexif/fpemetadata.pas b/components/fpexif/fpemetadata.pas index 018529476..221d24978 100644 --- a/components/fpexif/fpemetadata.pas +++ b/components/fpexif/fpemetadata.pas @@ -14,7 +14,10 @@ uses LazUTF8, {$ENDIF} fpeGlobal, - fpeExifData, fpeIptcData, fpeXmpData; + {$IFDEF FPC} + fpeXmpData, + {$ENDIF} + fpeExifData, fpeIptcData; type TImgInfo = class; @@ -64,7 +67,9 @@ type private FExifData: TExifData; FIptcData: TIptcData; + {$IFDEF FPC} FXmpData: TXmpData; + {$ENDIF} function GetComment: String; function GetWarnings: String; procedure SetComment(const AValue: String); @@ -87,14 +92,18 @@ type function CreateExifData(ABigEndian: Boolean = false): TExifData; function CreateIptcData: TIptcData; + {$IFDEF FPC} function CreateXmpData: TXmpData; + {$ENDIF} function HasComment: Boolean; function HasExif: Boolean; function HasIptc: Boolean; function HasThumbnail: Boolean; function HasWarnings: boolean; + {$IFDEF FPC} function HasXMP: Boolean; + {$ENDIF} { Comment stored in the Jpeg COM segment } property Comment: String read GetComment write SetComment; @@ -119,7 +128,9 @@ type property ExifData: TExifData read FExifData; property IptcData: TIptcData read FIptcData; + {$IFDEF FPC} property XmpData: TXmpData read FXmpData; + {$ENDIF} end; @@ -127,7 +138,8 @@ implementation uses Variants, - fpeStrConsts, fpeUtils, fpeExifReadWrite, fpeXMPReadWrite, fpeIptcReadWrite; + fpeStrConsts, fpeUtils, fpeExifReadWrite, {$IFDEF FPC}fpeXMPReadWrite,{$ENDIF} + fpeIptcReadWrite; type TJpegJFIFSegment = packed record @@ -264,7 +276,9 @@ begin FWarnings.Free; FExifData.Free; FIptcData.Free; + {$IFDEF FPC} FXmpData.Free; + {$ENDIF} inherited; end; @@ -284,6 +298,7 @@ begin Result := FIptcData; end; +{$IFDEF FPC} function TImgInfo.CreateXmpData: TXmpData; begin FWarnings.Clear; @@ -291,6 +306,7 @@ begin FXmpData := TXmpData.Create; Result := FXmpData; end; +{$ENDIF} procedure TImgInfo.Error(const AMsg: String); begin @@ -365,10 +381,12 @@ begin Result := FWarnings.Count > 0; end; +{$IFDEF FPC} function TImgInfo.HasXMP: Boolean; begin Result := FXmpData <> nil; end; +{$ENDIF} procedure TImgInfo.LoadFromFile(const AFileName: String); var @@ -522,8 +540,8 @@ var p: Int64; reader: TBasicMetadataReader; bigEndian: Boolean; - buf: TBytes = nil; - hdr: TBytes = nil; + buf: TBytes{$IFDEF FPC} = nil{$ENDIF}; + hdr: TBytes{$IFDEF FPC} = nil{$ENDIF}; hasJFIF: Boolean; {$IFNDEF FPC} sa: ansistring; @@ -570,6 +588,7 @@ begin finally reader.Free; end; + {$IFDEF FPC} end else if HasXMPHeader(AStream) and (mdkXMP in FMetadataKinds) then begin @@ -583,6 +602,7 @@ begin raise EFpExifReader.Create('Error reading XMP data: ' + E.Message); end; end; + {$ENDIF} end; end; M_IPTC: @@ -821,7 +841,8 @@ begin writer.Free; end; end; - + + {$IFDEF FPC} // XMP --> Write another APP1 segment if (mdkXMP in FMetadataKinds) and HasXMP then begin @@ -832,6 +853,7 @@ begin writer.Free; end; end; + {$ENDIF} // Write IPTCSegment (APP13) if (mdkIPTC in FMetadataKinds) and HasIPTC then begin diff --git a/components/fpexif/fpetags.pas b/components/fpexif/fpetags.pas index 90b7f2ecd..29404abe9 100644 --- a/components/fpexif/fpetags.pas +++ b/components/fpexif/fpetags.pas @@ -922,8 +922,8 @@ var intVal: Integer; i: Integer; s: String; - fmtStr: TStringArray = nil; - lkup: TStringArray = nil; + fmtStr: TStringArray{$IFDEF FPC} = nil{$ENDIF}; + lkup: TStringArray{$IFDEF FPC} = nil{$ENDIF}; len: Integer; begin Result := ''; @@ -1044,7 +1044,7 @@ procedure TIntegerTag.SetAsString(const AValue: String); var i, j, n: Integer; s: String; - intArr: TExifIntegerArray = nil; + intArr: TExifIntegerArray{$IFDEF FPC} = nil{$ENDIF}; begin if AValue = '' then begin SetLength(FRawData, 0); @@ -1227,7 +1227,7 @@ var i: Integer; s: String; fval: Double; - fmtStr: TStringArray = nil; + fmtStr: TStringArray{$IFDEF FPC} = nil{$ENDIF}; begin { Extract format string for each value. A simple format string is applied to all values. Inidividual format strings can be separated by '|'. } @@ -1438,7 +1438,7 @@ procedure TFloatTag.SetAsString(const AValue: String); var i, j, n: Integer; s: String; - floatArr: TExifDoubleArray = nil; + floatArr: TExifDoubleArray{$IFDEF FPC} = nil{$ENDIF}; begin if AValue = '' then begin SetLength(FRawData, 0); @@ -1498,7 +1498,7 @@ end; function TStringTag.GetAsString: String; var - sa: ansistring = ''; + sa: ansistring{$IFDEF FPC} = ''{$ENDIF}; begin // FIXME: The next lines assume that FValue stores a string as ansistring // which is true only for Exif, probably not for IPTC and XMP. diff --git a/components/fpexif/fpeutils.pas b/components/fpexif/fpeutils.pas index 406642a2f..6a5950b2f 100644 --- a/components/fpexif/fpeutils.pas +++ b/components/fpexif/fpeutils.pas @@ -1,4 +1,4 @@ -unit fpeUtils; +unit fpeUtils; {$IFDEF FPC} {$mode ObjFPC}{$H+} @@ -39,7 +39,7 @@ type property Items[AIndex: Integer]: Int64 read GetItem write SetItem; default; end; - TStringArray = array of string; + TStringArray = array of ansistring; {$ENDIF} // Big endian/little endian utilities @@ -498,7 +498,7 @@ var mins, secs: Double; i, j, len: Integer; n: Integer; - s: String = ''; + s: String{$IFDEF FPC} = ''{$ENDIF}; res: Integer; begin Result := false; diff --git a/components/fpexif/fpexmpdata.pas b/components/fpexif/fpexmpdata.pas index a6ca1c617..e12f8c4d0 100644 --- a/components/fpexif/fpexmpdata.pas +++ b/components/fpexif/fpexmpdata.pas @@ -10,7 +10,9 @@ unit fpeXMPData; +{$IFDEF FPC} {$mode objfpc}{$H+} +{$ENDIF} interface