AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

Ein Thema von Benmik · begonnen am 4. Jan 2016 · letzter Beitrag vom 11. Jan 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#1

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 00:42
Irgendwo bestimmt, aber auch in deiner Zitatstelle finde ich das nicht.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 00:51
Gar nicht so schwer zu finden.
Zitat von Exceptions (Delphi):
Bei einer Exception wird die Steuerung an Anweisungsliste2 übergeben und danach die Exception erneut ausgelöst.
Aber das muss man tatsächlich einmal gehört haben, um es zu wissen. Mich hatte das damals auch überrascht, als ich es das zum ersten Mal gehört habe
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#3

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 08:41
Irgendwo bestimmt, aber auch in deiner Zitatstelle finde ich das nicht.
Nicht?

Zitat:
Bei einer Exception wird die Steuerung an Anweisungsliste2 übergeben und danach die Exception erneut ausgelöst.
ergänzt durch ganz oben in dem Artikel
Zitat:
Eine Exception wird ausgelöst, wenn die normale Programmausführung durch einen Fehler oder ein anderes Ereignis unterbrochen wird. Die Steuerung wird dadurch an eine Exception-Behandlungsroutine übergeben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#4

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 13:05
Na ja, nach dem Hinweis von Sir Rufo war die besagte Textstelle natürlich das Erste, was mir ins Auge gefallen ist. Ich möchte aber auf das "explizit darauf hingewiesen" abheben. Nachdem ich den Sachverhalt kannte, habe ich auch die Textstelle verstanden. Es sollte aber umgekehrt sein!
Wie bestimmt zahllose andere vor mir habe ich mir ein kleines Beispielprogramm (natürlich Divison durch Null) aufgesetzt, um die Sache zu verstehen. Ich denke, bei so ganz alte Hasen wie Sir Rufo und Uwe Raabe sind diese Dinge längst so verinnerlicht, dass sie die Irrwege von nicht so Beschlagenen nicht ganz nachvollziehen können. Natürlich steht das alles da, aber Meister der Didaktik sind weder bei Embarcadero noch bei Microsoft zu finden. Bei msdn werden die Erklärungen der API-Funktionen nicht umsonst regelmäßig von Kommentaren von Anwendern begleitet.
Vielleicht fehlen mir die höheren Weihen, aber ich finde die Exception-Behandlung einfach bescheuert.
Bei
Delphi-Quellcode:
Try
...
Finally
...
End
ist zwar gesichert, dass ein bestimmter Code (Speicherfreigabe wohl in der Regel) ausgeführt wird, aber es knallt nach wie vor, da in Finally keine Exception-Behandlung enthalten ist. Soweit ich das sehe, ist es auch bei dem Codebeispiel von Sir Rufo so, dass das Programm anhält, wenn es knallt, da es ja kein Except gibt (oder???).
Das Ganze ist ja schon oft in der DP diskutiert worden. Der Standardvorschlag ist doch
Delphi-Quellcode:
Try
  Try
  ...
  Except
  ...
  End
Finally
...
End;
Dann aber läuft der Code über das Finally hinaus, weil die Exception ja behandelt ist, und man muss irgendwie hinbekommen, dass Result dann trotzdem FALSE ist. Vermutlich durch ein Exit nach dem Except? Eingängig ist das nicht. Wirklich was für die guten alten Real Programmer.
Sir Rufo hat aus meiner Function eine Procedure gemacht, was hier nicht in meinem Sinn ist, da ich wissen möchte, ob das Einlesen funktioniert hat. Wenn nicht (weil es noch keine DB gibt, die DB veraltet ist oder aus sonstigen Gründen), werden die Vorschaubilder neu erzeugt.
Ansonsten wollte ich noch einiges an Fehlerbehandlung einfügen, aber nach der Kopfsteh-Problematik ging es erstmal um die Machbarkeit.
In jedem Fall habe ich wieder was gelernt, danke dafür.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 13:13
Eine VCL/FMX Anwendung wird bei einer nicht abgefangenen Exception NICHT angehalten.

Es fallen auch keine Kühe oder Häuser um, es wird lediglich eine MessageBox angezeigt, die den Message-Text der Exception anzeigt.

Eine Exception ist nicht böse sondern bewahrt mich davor unnötig viel Code zu schreiben oder irgendetwas auszuführen was gar nicht ausgeführt werden darf.

Zudem kann man gezielt auf eine Exception reagieren, wenn man dafür einen Plan B hat. Sonst lässt man die einfach ziehen und somit zur Anzeige bringen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#6

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 9. Jan 2016, 13:38
Yess, Sir!
Auch ich finde Exceptions nicht böse! Ich finde sie gut! Sehr gut sogar! Honestly!
Ich bin nur der Meinung, das könne man besser machen. Programmiererfreundlicher. Nur als eine kleine Facette: Wie wäre es mit einem "Resume Next"?
Und nicht angehalten - na ja, es kommt eine MessageBox für den Anwender, und weiter geht es nicht, bis er was tut. Das ist sehr oft nicht das, was man will. Und die Routine wird sehr wohl verlassen, eine Schleife nicht weitergeführt. Geht in aller Regel auch nicht.
Wenn ich hier richtig mitlese, ist die endlose Kärrnerarbeit von zahllosen Try-Einfügungen auch bei Profis äußerst unbeliebt. Das kann man wirklich nicht besser machen?
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#7

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 10. Jan 2016, 15:18
Darf ich fragen, warum in Sir Rufos Beispiel das
Delphi-Quellcode:
  Stream := nil;
  VSBStream := nil;
nötig ist? Der Compiler beanstandet, die Variablen würden nie benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 11. Jan 2016, 10:46
Darf ich fragen, warum in Sir Rufos Beispiel das
Delphi-Quellcode:
  Stream := nil;
  VSBStream := nil;
nötig ist? Der Compiler beanstandet, die Variablen würden nie benutzt.
Siehe http://forum.delphi-treff.de/index.p...-verschachteln
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
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 10. Jan 2016, 19:08
Das kann man wirklich nicht besser machen?
Kann man z.B. mit RAII.
Am Ende ist Exception-sicheres Programmieren aber immer anstrengend. Nicht wegen den Exceptions, sondern weil das Problem (fehlertolerantes Programmieren) halt schwer ist.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#10

AW: Objekte einer TObjectList direkt aus dem Speicher lesen / in ihn schreiben

  Alt 11. Jan 2016, 09:15
Wenn ich hier richtig mitlese, ist die endlose Kärrnerarbeit von zahllosen Try-Einfügungen auch bei Profis äußerst unbeliebt. Das kann man wirklich nicht besser machen?
Im Prinzip hat man nur die Möglichkeit konsequent Logik und linearen Programmablauf (eventuell auch Resourcenschutz) in einzelne Methoden aufzutrennen.
Delphi-Quellcode:
type
  TMyObject = class(TObject)
  protected
    procedure TuWas;
    procedure TuWasMitObject(AObject: TObject);
    procedure TuWasAnderes;
  public
    procedure TuIrgendWas;
  end;

implementation

procedure TMyObject.TuWas;
var
  lObject: TObject;
begin
  lObject := TObject.Create;
  try
    TuWasMitObject(lObject);
  finally
    lObject.Free;
  end;
end;

procedure TMyObject.TuWasAnderes;
begin
  {...}
end;

procedure TMyObject.TuIrgendWas;
begin
  try
    TuWas;
  except
    TuWasAnderes;
  end;
end;
Bei Interfaces biete es sich an die Exceptionbehandlung in einem Decorator(Entwurfsmuster) zu implementieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 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