AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Integer und crash

Ein Thema von EWeiss · begonnen am 19. Mär 2017 · letzter Beitrag vom 27. Sep 2018
Antwort Antwort
Seite 6 von 6   « Erste     456   
EWeiss
(Gast)

n/a Beiträge
 
#51

AW: Array of Integer und crash

  Alt 27. Sep 2018, 10:34
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:
mit dem du nachvollziehen kannst, wie es in 32- und 64-Bit funktioniert.
Ich kann es nicht wirklich nachvollziehen, nach welchen Merkmalen\Definitionen\Kriterien abhängig davon das ich die Plattform ändere.
Woran erkenne ich also innerhalb des Quelltextes ob es sich um 64 oder 32 Bit handelt.

gruss

Geändert von EWeiss (27. Sep 2018 um 10:45 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#52

AW: Array of Integer und crash

  Alt 27. Sep 2018, 11:18
Wie ich jedoch Einfluss darauf nehmen kann was mir GetPropertyItem zurück liefert, entschließt sich meiner Kenntnis.
Entweder ist die Frage unscharf formuliert oder du musst gedanklich zwei Schritte zurückgehen.
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);
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#53

AW: Array of Integer und crash

  Alt 27. Sep 2018, 11:34
Zitat:
Entweder ist die Frage unscharf formuliert oder du musst gedanklich zwei Schritte zurückgehen.
Wohl eher unscharf.. denn es war keine frage sondern eine Feststellung.
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:
  Size := GetPropertyItemSize(EXAMPLE_PROPERTY);
   GetMem(MyPropItemPtr, Size);
   GetPropertyItem(Image, EXAMPLE_PROPERTY, Size, MyPropItemPtr);
   // ... mache dein Zeug
   FreeMem(MyPropItemPtr, Size);
Ist doch genau das selbe was ich auch mache.
Ich hole mir den Size vom Record und Reserviere den Speicher dafür.
Delphi-Quellcode:
    // 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
gruss

Geändert von EWeiss (27. Sep 2018 um 11:43 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#54

AW: Array of Integer und crash

  Alt 27. Sep 2018, 13:36
Hast du denn mal mein Beispielprojekt ausgeführt und auf GIF geändert und die entsprechende Property eingetragen, die dich für GIF interessiert?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#55

AW: Array of Integer und crash

  Alt 27. Sep 2018, 13:41
Hast du denn mal mein Beispielprojekt ausgeführt und auf GIF geändert und die entsprechende Property eingetragen, die dich für GIF interessiert?
Sorry nein, weil mein Projekt ja nach dem entfernen von VAR funktioniert.
Beide 32 und 64 Bit.

Es ist ja dann das gleiche wie bei dir.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#56

AW: Array of Integer und crash

  Alt 27. Sep 2018, 14:22
Hast du denn mal mein Beispielprojekt ausgeführt und auf GIF geändert und die entsprechende Property eingetragen, die dich für GIF interessiert?
Sorry nein, weil mein Projekt ja nach dem entfernen von VAR funktioniert.
Beide 32 und 64 Bit.

Es ist ja dann das gleiche wie bei dir.

gruss
Siehe Beitrag #46!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#57

AW: Array of Integer und crash

  Alt 27. Sep 2018, 14:26
Zitat:
Ggf. sind aber deine Header nicht richtig übersetzt?
Sie sind jetzt korrekt übersetzt sagte ich doch schon VAR darf nicht addiert werden..
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

Geändert von EWeiss (28. Sep 2018 um 09:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 6   « Erste     456   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz