AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TimeSpan+DateTime etc unter Delphi Win32
Thema durchsuchen
Ansicht
Themen-Optionen

TimeSpan+DateTime etc unter Delphi Win32

Ein Thema von Lemmy1 · begonnen am 17. Dez 2005 · letzter Beitrag vom 10. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Lemmy1
Lemmy1
Registriert seit: 28. Nov 2004
Edit: Project-Homepage gibts nun hier

Hallo zusammen,

da Delphi 2006 nun intelligentere Records kann als seine Vorgänger (damit meine ich Function, Private/Public, Class Functions und Operatorüberladung), lag es einmal nahe, die bekannten schönen Valuetypes aus .Net mal für Win32 nachzuprogrammieren.

Oberstes Gebot für mich dabei war Quellcodekompatibilität, so dass ein und derselbe Code in beiden Welten funktioniert. Via {$IFDEF} macht sich die Unit dann unter .Net selbst unsichtbar.

Zum Üben hab ich mir zu erst einmal "TimeSpan" rausgesucht und bin damit auch fertig geworden. Funktioniert relativ gut, wenn man von zwei Delphi 2006 Bugs absieht:
- Der Debugger crasht leider total, da er wohl die ganzen neuen Recordfeatures noch nicht so ganz kennt
- Beim Aufruf gibt es gelegentlich einen Compilerfehler, so dass man in diesen Fällen den Code etwas umschreiben muss

Hab beide Bugs hier unter Bugreports gemeldet. Der zweite ist auch bereits bei Borland auf Status=Open. Bei dem anderen vertrau ich in Sakuras Fähigkeiten, seine Kollegen in den allerwertesten zu treten

Als nächstes Projekt steht für mich DateTime an, da TimeSpan ohne DateTime nur halb so viel Spaß macht. Aber es gibt noch viele weitere interessante Klassen, wobei für mich die Valuetypes (=records) im Vordergrund stehen.

Später könnte man sich auch überlegen, Klassen wie StringBuilder nachzuprogrammieren. Sie hat zwar in der Delphi-Win32 Welt eigentlich nichts zu tun, aber man würde Sourcecode Kompatibilität erreichen, ohne seinen Code durch $IFDEFs verschandeln zu müssen.

Was meint Ihr dazu?
Angehängte Dateien
Dateityp: pas netforwin32_351.pas (14,9 KB, 42x aufgerufen)
www.nemu.com - The N64 Emulator
 
Benutzerbild von Lemmy1
Lemmy1

 
Delphi 2006 Professional
 
#11
  Alt 9. Aug 2006, 23:07
Hi!

Schonmal im Vorraus Danke für das Interesse. So langsam möchte ich das Projekt wirklich durchziehen und zumindest die wichtigsten Klassen 100% kodieren und testen.

Zu Deinem Problem: Also ich hab nur Delphi 2006 installiert. Alle anderen Versionen stehen im Schrank.

Das Problem an der Delphi 7 Sache ist aber, dass da einfach Sprachfeatures fehlen: Records mit Methoden und Operator Overloading.

Ziel des ganzen ist es ja, die Sourcecode Kompatibilität zu .Net herstellen, so dass man einfach zwischen .Net und Win32 wechseln kann OHNE auf die ganzen coolen Framework classes zu verzichten.

Operator Overloading auf Records könnte man dann ja nur mit irgendwelchen Funktionen von außen in der Art von "TimeSpanAdd(ts1, ts2)" machen, aber das würde dann eben nicht unter .Net kompilieren. Außerdem wärs hässlich
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#12
  Alt 9. Aug 2006, 23:24
Schau dir mal meinen Code an.

Ich verwende objects, das sind Records mit Methoden.

Ich ersetze einfach die Propertys direkt durch ihre Accessor-Methoden und deklariere die Klassenoperatoren als Funktionen.

Man muss die Dinger nicht instantiieren oder sowas, kann aber trotzdem mit ihnen ein paar Spielereien machen. Nur Operatorenüberladung funktioniert halt nicht.
Manuel Eberl
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#13
  Alt 9. Aug 2006, 23:26
Wenn ich ein Delphicompiler wäre hätte ich auch so reagiert. In der Unit waren soviele gemeine Fehler, dass ich da auch abgedret wäre

Gruss
Thorsten
Angehängte Dateien
Dateityp: pas netforwin32_148.pas (13,4 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#14
  Alt 9. Aug 2006, 23:53
Ich konnte es ja nicht debuggen - habs jetzt unter Delphi 2005 gedebuggt und jetzt läuft es - nur unter Delphi 7 nicht, da kommt weiterhin die AV.

Ein Aufruf sähe so aus:
Delphi-Quellcode:
var time1, time2: TimeSpan;
begin
time1:=time1.Create(16,20,0);
time2:=time2.Create(18,40,0);
showmessage(time2.Subtract(time1).toString);
Angehängte Dateien
Dateityp: pas netforwin32_159.pas (13,1 KB, 11x aufgerufen)
Manuel Eberl
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#15
  Alt 9. Aug 2006, 23:59
Mit der oben angehängten Unit kommt unter Delphi7 und deinem Beispiel folgendes heraus: 02:20:00

Edit: Deine Unit sieht jetzt im Prinzip so aus wie meine überarbeitete. Jetzt funktioniert auch diese unter Delphi7.
Was mir gerade aufgefallen ist: Wieso benutzt du hier object und nicht class?

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#16
  Alt 10. Aug 2006, 00:02
Was hast du erwartet?

18-16=2
40-20=20

stimmt doch.
Manuel Eberl
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#17
  Alt 10. Aug 2006, 00:09
Ich habe gar nichts erwartet. Ich habe nicht versucht die Unit zu verstehen. Ich habe nur die Fehler behoben. Da du ein Beispiel gepostet hast, war ich nur an einer Lösung interresiert.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#18
  Alt 10. Aug 2006, 00:11
Sry, das klang so als würdest du das Ergebnis für falsch halten.

Ich verwende deshalb nicht class, weil man Klassen instantiieren muss.

Auf die Dinger kann man auch ohne Instantiierung zugreifen.

Allerdings könnte man natürlich auch Klassen verwenden, das ist klar.
Manuel Eberl
  Mit Zitat antworten Zitat
Benutzerbild von Lemmy1
Lemmy1

 
Delphi 2006 Professional
 
#19
  Alt 10. Aug 2006, 00:15
Gibt es denn abgesehen von der fehlenden Operator Überladung noch irgendwelche Unterschiede zwischen Records mit Funktionen und old-style "object"s?

Hrm könnt ja als kompilierswitch ganz nett sein, dass auch via objects zu realisieren....hrm
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#20
  Alt 10. Aug 2006, 07:48
objects haben Methoden. records nicht.

objects können zwar auch Propertys haben, aber die werden vom Compiler so umgesetzt, dass sie AVs auslösen.
Manuel Eberl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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