![]() |
AW: Array of Integer und crash
Danke dir für das Beispiel.
Wie ich jedoch Einfluss darauf nehmen kann was mir GetPropertyItem zurück liefert, entschließt sich meiner Kenntnis. Ich halte mich jetzt strikt an MS und deren API in (C++) also OHNE var in beiden varianten 32 und 64 Bit. Es scheint so das jeder glaubt machen zu können was er will. Zitat:
Woran erkenne ich also innerhalb des Quelltextes ob es sich um 64 oder 32 Bit handelt. gruss |
AW: Array of Integer und crash
Zitat:
Du entscheidest durch Angaben von Konstanten wie bspw. PropertyTagExifBrightness, welche Property du möchtest. Die Größe des zu reservierenden Buffers entscheidet sich durch die Abfrage mit der GetPropertyItemSize. Du muss Speicher mit der zurückgebenden Größe reservieren, weil es nämlich ein Record mit variabler Größe ist. Dies wird durch PropertyItem.value verursacht. PropertyItem.value ist ein Zeiger auf ein Buffer, der so groß ist wie PropertyItem.length bzw. die GetPropertyItemSize. Reservierst du jetzt nur Speicher für das Record PropertyItem/TPropertyItem, dann ist das in vielen Fällen zuwenig.
Delphi-Quellcode:
{$EXTERNALSYM PropertyItem}
PropertyItem = record // NOT PACKED !! id : PROPID; // ID of this property length : ULONG; // Length of the property value, in bytes type_ : WORD; // Type of the value, as one of TAG_TYPE_XXX value : Pointer; // property value end; TPropertyItem = PropertyItem; {$EXTERNALSYM TPropertyItem} PPropertyItem = ^TPropertyItem; {$EXTERNALSYM PPropertyItem} // Das ist falsch: var MyPropItemPtr: PPropertyItem; Size: UINT; begin GetMem(MyPropItemPtr, SizeOf(PropertyItem)); GetPropertyItem(Image, EXAMPLE_PROPERTY, SizeOf(PropertyItem), MyPropItemPtr); // Das knallt hier früher oder später // so wäre richtig: Size := GetPropertyItemSize(EXAMPLE_PROPERTY); GetMem(MyPropItemPtr, Size); GetPropertyItem(Image, EXAMPLE_PROPERTY, Size, MyPropItemPtr); // ... mache dein Zeug FreeMem(MyPropItemPtr, Size); |
AW: Array of Integer und crash
Zitat:
Ich habe keinen Einfluss darauf was mir GetPropertyItem zurück liefert bzw. kann keinen Einfluss darauf nehmen abgesehen davon den Speicher richtig zu Reservieren. Mein Problem ergab sich aus der VAR variable (Rückgabe) diese scheint bei unterschiedlichen Programmiersprachen anders ausgelegt zu werden.(Oder diese wurde dort falsch definiert). Deshalb halte ich mich jetzt strikt an die Funktion die von MS festgelegt wurde (C++) Aber danke verstehe was du meinst.
Delphi-Quellcode:
Ist doch genau das selbe was ich auch mache.
Size := GetPropertyItemSize(EXAMPLE_PROPERTY);
GetMem(MyPropItemPtr, Size); GetPropertyItem(Image, EXAMPLE_PROPERTY, Size, MyPropItemPtr); // ... mache dein Zeug FreeMem(MyPropItemPtr, Size); Ich hole mir den Size vom Record und Reserviere den Speicher dafür.
Delphi-Quellcode:
gruss
// Datengröße vom EXIF-Tag PropertyTagLoopCount ermitteln
if GDIP_GetPropertyItemSize(GifImage, PropertyTagLoopCount, PropSize) = OK then begin // Speicher allokieren GetMem(FPropItem, PropSize); // Daten auslesen if GetPropertyItem(GifImage, PropertyTagLoopCount, PropSize, FPropItem) = OK then |
AW: Array of Integer und crash
Hast du denn mal mein Beispielprojekt ausgeführt und auf GIF geändert und die entsprechende Property eingetragen, die dich für GIF interessiert?
|
AW: Array of Integer und crash
Zitat:
Beide 32 und 64 Bit. Es ist ja dann das gleiche wie bei dir. gruss |
AW: Array of Integer und crash
Zitat:
|
AW: Array of Integer und crash
Zitat:
Warum ich damit Probleme hatte liegt an den unterschiedlichen Übersetzungen verschiedener Programmiersprachen. Wenn du es testen möchtest bitte... es ist deine Entscheidung. Achtung nur GIF funktioniert (dort hatte ich das besagte Problem) es befindet sich kein APNG im PNG Ordner. Und ja auf Win10 getestet den Beitrag schreibe ich gerade unter Win10. Danke. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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-2025 by Thomas Breitkreuz