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
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Array of Integer und crash

  Alt 26. Sep 2018, 13:28
Muss das nochmal aufgreifen..

Habe das Projekt nach 64 Bit umgelegt bekomme aber jetzt fortlaufend "Inaccessible value"
Delphi-Quellcode:
function TAnimateGif.GetPropertyItem(GifImage: LONG_PTR; PropertyID: ULONG; PropertyItemSize: UINT;
  var PropertyItemData: PPropertyItem): GPSTATUS;
begin

  // Daten auslesen
  Result := GDIP_GetPropertyItem(GifImage, PropertyID, PropertyItemSize, PropertyItemData);
end;
Delphi-Quellcode:
function GDIP_GetPropertyItem(Img: LONG_PTR; propId: PROPID; propSize: UINT;
  var buffer: PPROPERTYITEM
): GPSTATUS; stdcall;
begin

  result := GdipGetPropertyItem(Img, propId, propSize, buffer);
end;
bevor GdipGetPropertyItem aufgerufen wird ist der Buffer gefüllt.
Nach dem Aufruf von GdipGetPropertyItem ist der buffer Inaccessible.

Wie immer tritt nur unter 64 Bit auf.

Die Funktion ist diese.
GdipGetPropertyItem: function(Image: LONG_PTR; propId: PROPID; propSize: UINT; var buffer: PPROPERTYITEM): GPSTATUS; stdcall;

Und der Record der..
Delphi-Quellcode:
  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;
  PPropertyItem = ^TPropertyItem;
es kracht dann hier
Delphi-Quellcode:
    // Daten auslesen
    if GetPropertyItem(GifImage, PropertyTagFrameDelay, PropSize, FPropItem) = OK then
    begin
      // Bytearray dimensionieren
      SetLength(Prop, PropItem.Length);
      CopyMemory(@Prop[0], PropItem.value, PropItem.Length);
weil PropItem bzw. vorher schon PropertyItemData nicht zugänglich ist.

PS:
Es hat nichts mit dem setzen der Optimierung zu tun!

gruss
  Mit Zitat antworten Zitat
TiGü

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

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:11
Delphi-Quellcode:
    // Daten auslesen
    if GetPropertyItem(GifImage, PropertyTagFrameDelay, PropSize, FPropItem) = OK then
    begin
      // Bytearray dimensionieren
      SetLength(Prop, PropItem.Length);
      CopyMemory(@Prop[0], PropItem.value, PropItem.Length);
Du füllst FPropItem und greifst dann auf PropItem (ohne F) zu.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:15
Delphi-Quellcode:
    // Daten auslesen
    if GetPropertyItem(GifImage, PropertyTagFrameDelay, PropSize, FPropItem) = OK then
    begin
      // Bytearray dimensionieren
      SetLength(Prop, PropItem.Length);
      CopyMemory(@Prop[0], PropItem.value, PropItem.Length);
Du füllst FPropItem und greifst dann auf PropItem (ohne F) zu.
FPropItem ist nicht zugänglich. (Inaccessible)
Und ja das gleiche tue ich auch unter 32 Bit ohne Probleme..

Danke.
Der Fehler den ich bekomme ist EInOutError..

zudem es ist ein Property
property PropItem: PPropertyItem read FPropItem write FPropItem;

FPropItem liest und weist das Result PropItem zu beide haben also den gleichen Wert.

gruss

Geändert von EWeiss (26. Sep 2018 um 14:57 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:20
Reservierst du denn vorher Speicher von der Größe, die dir GdipGetPropertyItemSize liefert, für deine Membervariable FPropItem bzw. für das dahinterliegende Record?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:23
Reservierst du denn vorher Speicher von der Größe, die dir GdipGetPropertyItemSize liefert, für deine Membervariable FPropItem bzw. für das dahinterliegende Record?
Ja..
Delphi-Quellcode:
  // Datengröße vom EXIF-Tag PropertyTagFrameDelay ermitteln
  if GDIP_GetPropertyItemSize(GifImage, PropertyTagFrameDelay, PropSize) = OK then
  begin
    // Speicher allokieren
    GetMem(FPropItem, PropSize);
gruss
  Mit Zitat antworten Zitat
TiGü

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

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:39
Ein kleines 20-50 Zeilenprogramm zum nachvollziehen und selber kompilieren?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Array of Integer und crash

  Alt 26. Sep 2018, 14:53
Ein kleines 20-50 Zeilenprogramm zum nachvollziehen und selber kompilieren?
Leider nicht.
Es geht um GDIPlus alleine die Header sind schon ein paar Hundert Zeilen.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:39 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