AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

Ein Thema von Kathmai · begonnen am 11. Apr 2014 · letzter Beitrag vom 15. Apr 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Kathmai
Kathmai

Registriert seit: 3. Sep 2003
Ort: Böblingen
21 Beiträge
 
Delphi 11 Alexandria
 
#1

Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 11. Apr 2014, 12:53
Hallo Leute,

hab ein kleines Problem. Habe das Firemonkey Sample "FlipViewDemo" etwas abgeändert. Funktioniert soweit aber auf dem Entwicklungs PC läuft es beim Laden der Bilder ohne Probleme.
Auf dem PC wofür das Programm bestimmt ist, kommt eine Zugriffsverletzung und zwar in Form von "Zugriffsverletzung bei Adresse .....A14554 in Modul 'ScreenPlayer.exe'. Lesen von Adresse 0000000000000000".

Die Bilder werden von einem Ordner geladen (JPEG's) und im Sample Programm in einem Thread geladen im Hintergrund.

Auf dem Entwicklungs-PC läuft alles Problemlos auf dem anderen kommt der Fehler. - Selben Bilder und Anzahl wird verwendet.

2. PC wo die Zugriffsverletzung kommt: Zotac nano AQ-01 mit Samsung EVO 120 GB und 4GB RAM - CPU AMD A4-5000

- Beides Win7 Pro 64Bit

Debuggen kann ich auch nicht da Delphi den Prozess nicht "erzeugen" kann. Hab schon Delphi mit admin Rechten gestartet aber bringt auch nix. Kann das Programm nur ohne Debugger zum laufen kriegen.

Hat jemand eine Ahnung woran das liegen könnte?

Hier die Ladefunktion (nichts verändert gegenüber des Samples von Embarcadero).

Delphi-Quellcode:
procedure TImageDataSource.Load;

var
  SR: TSearchRec;
  Res: Integer;
  I: Integer;
  ImagesFilter: string;
begin
  I := 0;

  // Find all images
  ImagesFilter := ImagesPath + '*.jpg';
  Res := FindFirst(ImagesFilter, faAnyFile, SR);
  while Res = 0 do
  begin
    SetLength(FImages, I + 1);
   try
    FImages[I] := TBitmap.CreateFromFile(ImagesPath + SR.Name);
   except
    showmessage('Fehler');
   end;
    Res := FindNext(SR);
    Inc(I);
  end;
  if Length(FImages) > 0 then
    FCurrentIndex := 0
  else
    FCurrentIndex := -1;
end;
Danke im vorraus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 11. Apr 2014, 13:16
Ich hab zwar von FM keinen Plan, aber bist Du sicher, dass der Fehler im geposteten Code auftritt? Die Speicheradresse lässt ja eher einen Null-Poiter-Zugriff vermuten, dafür kann ich im gezeigten Code keine Möglichkeit erkennen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 11. Apr 2014, 14:35
Habe das Firemonkey Sample "FlipViewDemo" etwas abgeändert.
...
Hat jemand eine Ahnung woran das liegen könnte?
...
Hier die Ladefunktion (nichts verändert gegenüber des Samples von Embarcadero).
Der erste April ist vorbei.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 11. Apr 2014, 17:50
Zitat:
Debuggen kann ich auch nicht da Delphi den Prozess nicht "erzeugen" kann. Hab schon Delphi mit admin Rechten gestartet aber bringt auch nix. Kann das Programm nur ohne Debugger zum laufen kriegen.
Man kann das Programm auch erst starten und sich dann mit dem Debugger darauf verbinden. (siehe Menü "Start")
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 07:08
Habe das Firemonkey Sample "FlipViewDemo" etwas abgeändert.
Hier die Ladefunktion (nichts verändert gegenüber des Samples von Embarcadero).
Statt hier copyrightgeschützten Quelltext der Firemonkey-Bibliotheken zu posten (TImageDataSource gehört ja nicht zu den Samples) (EDIT: Ok, gehört zu den Samples, hab mich verguckt...), wäre es sinnvoll zu posten was du geändert hast...

Außerdem:
Läuft denn die ursprüngliche Fassung? (Kannst du ggf. ja aus dem Repository reverten, das sollte direkt schon so eingerichtet sein.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke (12. Apr 2014 um 11:21 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 07:12
Statt hier copyrightgeschützten Quelltext der Firemonkey-Bibliotheken zu posten
Ich glaube, das ist zu banal, um es als schützenswert zu erachten. Wenn ich "I'll be back" poste, bekomme ich ja auch keinen Ärger mit der GEMA (oder? )?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 08:34
Also bei mir kommt die Schutzverletzung auch (XE5, 32-Bit und 64-Bit Kompilat). Das passiert direct bei der Benutzung des IWICImagingFactory Interfaces in TBitmapCodecWIC.LoadFromFile in dieser Zeile:
Delphi-Quellcode:
    TCanvasD2D.ImagingFactory.CreateDecoderFromStream(SA, GUID_NULL, WICDecodeMetadataCacheOnDemand, dec);
...
Das wird in dem von dir geposteten Quelltext in TBitmap.CreateFromFile benutzt. Da kann ich so auf den ersten Blick leider auch nicht helfen, ich muss los. Ich schaue später noch einmal drauf.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#8

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 09:42
Statt hier copyrightgeschützten Quelltext der Firemonkey-Bibliotheken zu posten
Die Demos von Delphi sind seit 5 Jahren öffentlich und für alle frei zugänglich.
radstudiodemos-code\Object Pascal\FireMonkey Desktop\MetropolisUIFlipViewDemo\FMX.FlipView.Data .pas

Es ist das Einzige, was man praktisch wöchentlich am Delphi aktualisieren kann, auch nach dem Jahr noch.
http://sourceforge.net/projects/radstudiodemos/
http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/
http://docwiki.embarcadero.com/CodeE...ategory:Sample
http://docwiki.embarcadero.com/CodeE...olsDemo_Sample
http://docwiki.embarcadero.com/RADSt...Changes_for_XE
...

Wenn das Demoverzeichnis nicht bereits als SVN-Repository vorliegt, dann kann man es einfach neu auschecken.
Ansonsten mal updaten und schauen, ob es eventuell einen Bugfix gab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Apr 2014 um 09:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 11:24
Die Demos von Delphi sind seit 5 Jahren öffentlich und für alle frei zugänglich.
radstudiodemos-code\Object Pascal\FireMonkey Desktop\MetropolisUIFlipViewDemo\FMX.FlipView.Data .pas
Ok, ich habe mich verguckt, ich dachte die Datei wäre aus der Bibliothek von FireMonkey.

Wenn das Demoverzeichnis nicht bereits als SVN-Repository vorliegt, dann kann man es einfach neu auschecken.
Ansonsten mal updaten und schauen, ob es eventuell einen Bugfix gab.
Leider nicht. Das war das erste was ich in XE5 gemacht hatte.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Programm mit Zugriffsverletzung - 1. PC funktioniert - 2. Nicht

  Alt 12. Apr 2014, 13:27
Da steht aus irgendeinem Grund unter 64-Bit irgendwie die OLE-Funktionalität nicht richtig zur Verfügung.

Retten könnt Ihr es unter WIN64 so:
Delphi-Quellcode:
procedure TImageDataSource.Load;
const
  ImagesPath = './images/';
var
  SR: TSearchRec;
  Res: Integer;
  I: Integer;
  ImagesFilter: string;
begin
  oleInitialize (NIL); // HS: ADD + ActiveX to units

  I := 0;
  // Find all images
  ImagesFilter := ImagesPath + '*.jpg';
  Res := FindFirst(ImagesFilter, faAnyFile, SR);
  while Res = 0 do
  begin
    SetLength(FImages, I + 1);
    FImages[I] := TBitmap.CreateFromFile(ImagesPath + SR.Name);
    Res := FindNext(SR);
    Inc(I);
  end;
  if Length(FImages) > 0 then
    FCurrentIndex := 0
  else
    FCurrentIndex := -1;

  FindClose (sr); // HS: ADD
end;
Also ActiveX zum Uses-Abschnitt hinzu und OleInitialize in der Procedure aufrufen.
Ein Aufruf von OleInitialize zur Intialisierung der Unit reicht nicht, anscheinend gibt es irgendwo zwischendurch an anderer Stelle ein OleUnitialize.

[nur am Rande bemerkt: Findclose habe ich auch hinzugefügt, wird gerne vergessen und führt zu einer Vielzahl von Problemen]

Der Fehler tritt genau hier auf:
Delphi-Quellcode:
class function TCanvasD2D.ImagingFactory: IWICImagingFactory;
begin
  if not Assigned(FImagingFactory) then
  begin
    CoCreateInstance(CLSID_WICImagingFactory, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
      IUnknown, FImagingFactory); // <-- Hier wird unter Win64 immer NIL zurückgeliefert, wenn OLEInitialize zuvor nicht aufgerufen wurde
  end;
  Result := FImagingFactory;
end;
Im Ergebnis steht dann also keine ImagingFactory zur Verfügung und dann kracht's eben.

Geändert von Harry Stahl (12. Apr 2014 um 13:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 21:51 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