![]() |
Re: AnsiString mit fester Länge
Zitat:
Zitat:
edit:
Delphi-Quellcode:
type
TFourCC = record case Integer of 1: (AsAnsi: array [0..3] of AnsiChar); 4: (AsLong: LongInt); end; function tEndInd.Put32s(AData: LongInt): AnsiString; var FourCC: TFourCC; begin FourCC.AsLong := AData; if MotorolaOrder then // SwapLong(AData) FourCC.AsLong := (Swap(LoWord(AData)) shl 16) or Swap(HiWord(AData)) else FourCC.AsLong := AData; Result := FourCC.AsAnsi; end; |
Re: AnsiString mit fester Länge
Es sieht so aus, als hätte ich doch nicht deine, sondern eine alte Unit erwischt, obwohl auch ich das vorher noch einmal geprüft hatte. Ist mir natürlich peinlich, verstehe es aber selbst nicht ganz. Tschuldigung.
|
Re: AnsiString mit fester Länge
Hallo Benmik,
nachdem du dich offenbar gut mit dEXIF auskennst: Um mein Programm, das dEXIF verwendet, auf Speicherlecks zu testen, habe ich heute mal FastMM4 an den Anfang der uses-Liste des Projekts gesetzt und bin über eine Unmenge von Meldungen über Speicher-Lecks gestolpert, die allesamt von dEXIF herrühren. Auch das mit dEXIF mitgelieferte DExView verhält sich ähnlich. Ist dir das auch schon aufgefallen, bzw. hast du vielleicht einige dieser Speicherlecks schon beseitigt? Gruß Werner |
Re: AnsiString mit fester Länge
Seltsam, mit MemCheck werden keine Speickerlecks gefunden. Aber es war mir ohnehin schon aufgefallen, dass FastMM4 immer wieder harmlose Stringoperationen bemängelt hat.
|
Re: AnsiString mit fester Länge
FastMM, MemCheck und Co. können aber auch nicht alle SpeicherLeaks finden ... vorallem fast alle die, welche nicht über den Speichermanager laufen, fallen nicht auf.
hab hier grad irgendwie den Überblick verloren ... wo/welche ist denn nun eigentlich eine aktuelle Version dieser Datei? [add] hab auch mal etwas gespielt :angel:
Delphi-Quellcode:
via Pointer-Variable;
function tEndInd.Put32s(AData: LongInt): AnsiString;
begin SetLength(Result, 4); if MotorolaOrder then begin asm mov eax, &AData bswap eax mov edx, &Result mov edx, [edx] mov [edx], eax end; end else PLongInt(@Result[1])^ := aData; end; function tEndInd.Put32s(AData: LongInt): AnsiString; begin SetLength(Result, 4); if MotorolaOrder then PLongInt(@Result[1])^ := SwapLong(AData) else PLongInt(@Result[1])^ := aData; end;
Delphi-Quellcode:
function tEndInd.Put32s(AData: LongInt): AnsiString;
var P: PLongInt; begin SetLength(Result, 4); P := @Result[1]; if MotorolaOrder then begin asm mov eax, &AData bswap eax mov edx, &P mov [edx], eax end; end else P^ := aData; end; function tEndInd.Put32s(AData: LongInt): AnsiString; var P: PLongInt; begin SetLength(Result, 4); P := @Result[1]; if MotorolaOrder then P^ := SwapLong(AData) else P^ := aData; end; |
Re: AnsiString mit fester Länge
Nachdem ich kein solcher Delphi-Crack bin wie himitsu (danke an die Wertschätzung von wp_xxyyzz, leider nicht ganz berechtigt :wink: ), habe ich nochmal ein bisschen nachgeforscht, und beim
![]() ![]() ![]() ![]() Ich würde himitsu gern fragen, ob man mit seinem Code jetzt tatsächlich den in dEXIF ersetzen kann. Mir kommt es merkwürdig vor, dass in der ganzen Zeit nie eine Fehlfunktion des Codes resultiert oder jedenfalls nicht bemerkt worden sein soll. Leider ist mir der Unterschied zwischen den beiden Varianten nicht klar, und vor allem nicht, warum die Vorschläge jeweils als Doppelwhopper aufgeführt sind (Zeile 1 / Zeile 15, beispielsweise). Für etwas Aufklärung wäre ich dankbar. (Mit der Dialogkomponente bin ich übrigens sehr zufrieden, leider hat der Autor sie noch nicht bei Torry aktualisiert). Danke Benmik |
Re: AnsiString mit fester Länge
Es ist aber kein Wunder, dass die vermeintlichen Fehler in der Funktion nicht aufgefallen sind! Sie werden nirgendwo benutzt! Die Korrekturen haben also nur einen gewissen akademischen Wert.
|
Re: dEXIF 1.03d portiert nach Delphi 2009
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:
So lasse ich die "Maker Specific Data" ausgeben:
Delphi-Quellcode:
Im Anhang das Originalbild mit den EXIF-Daten und die beide Ausgaben als Bildschirmfoto.
if ImgData.HasEXIF and ImgData.ExifObj.msAvailable then
begin // verbose data is only available in the trace strings ImgData.ExifObj.ResetIterator; while ImgData.ExifObj.IterateFoundTags(CustomEXIF, Item) do Memo(Item.Desc, Item.Data); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz