AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Cross-Platform-Komponenten etwickeln?
Thema durchsuchen
Ansicht
Themen-Optionen

Cross-Platform-Komponenten etwickeln?

Ein Thema von himitsu · begonnen am 22. Dez 2013 · letzter Beitrag vom 23. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 15:29
Nimm bei Klassen FreeAndNil das passt dann immer
Leider nicht. Gerade zur Laufzeit erstellte Komponenten erhalten so viele Referenzen, dass ARC das nicht mehr mitbekommt. Dort ist dann Release zu verwenden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.261 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 16:17
Nimm bei Klassen FreeAndNil das passt dann immer
Leider nicht. Gerade zur Laufzeit erstellte Komponenten erhalten so viele Referenzen, dass ARC das nicht mehr mitbekommt. Dort ist dann Release zu verwenden.
Für Komponenten sollte man schon immer Release verwenden (habe ich aber erst bei einer Schulung von Deveperts gelernt) Damit wird auch die Ereignissbehandlung richtig geschlossen!

Da habe ich bei einen Delphi 5 Projekt nun keine Schutzverletzung aus heiterem Himmel mehr beim Beenden des Programms!

Zu den Stringbehandlungen kann ich folgenden Tipp geben:

Delphi-Quellcode:

x: string;


   {$IFDEF NEXTGEN}
   for i:= 0 to Length(x)-1 do begin
   {$ELSE}
   for i:= 1 to Length(x) do begin
   {$ENDIF}

Geändert von arnof (22. Dez 2013 um 16:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 17:44
Grade für Komponenten ist das jetzt der totale Mistehaufen.
Die String-Helper kann man nicht verwenden, wenn man den Code auch für ältere Delphi bereitstellen will, außer man baut sich da wieder eigene Helper, welche dann über Compilerswitches reinelinkt werden. (so kommt man zumindestens noch bis D2006 runter)

Aber grade wegen der Objekt-Referenzen hab ich eben ein Problem.
- im Mobile-Compiler auch Interfaces verwenden (gibt es da eventuelle Nachteile), oder lieber "native" Objekte
- bei ARC intern auf die Referenzen achten, wenn man extern Interfaces bereitstellt
- in Windows/Desktop mit Interfaces zum Nutzer (und intern natürlich Objekte)
- ...

Hatte vor knapp 2,5 oder 3 Wochen eine Anfrage bekommen, wie es beim himXML mit X-Platform aussieht.
Dort handelt es sich um mehrfach querverlinkte Objekt-Referenzen wo ich jetzt dank ARC jetzt noch mehr auf die Referenzzählung achten darf. (auch ohne ist das nicht einfach)
Was noch "übersichtlicher" wird, wenn ich bei ARC Interface- und Objektreferenzen verwende, wo "früher" bei den Objekten nicht auf eine Referenzzählung geachtet werden mußte.

Wie ist das beim ARC denn jetzt nun mit den Weak-Pointern?

Schon mit XE3 fing das Chaos an und keiner wusste was, also legte ich alles auf Eis und wollte mal schauen wie es nun wirklich weitergeht.
http://blog.synopse.info/post/2012/1...lass-instances
http://docwiki.embarcadero.com/RADSt...lphi-Compilern
Aber dank eines fehlenden aktuellen Compilers kann ich alles nur "theoretisch" schreiben und hoffen es läuft dann auch so, wie ich es mit dachte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 17:53
Grade für Komponenten ist das jetzt der totale Mistehaufen.
Die String-Helper kann man nicht verwenden, wenn man den Code auch für ältere Delphi bereitstellen will, außer man baut sich da wieder eigene Helper, welche dann über Compilerswitches reinelinkt werden. (so kommt man zumindestens noch bis D2006 runter)
Irgendwann muss mal Altsysteme abkündigen. Ist wie mit alten Windows-Versionen. Man wird zwar länger Support bieten als der Hersteller aber irgendwann muss man mal los lassen.
Wie soll der Hersteller (hier Emba) neu (nötige) Sprachfeaters aufnehmen wenn es dann immer wieder heißt: "das geht ja wieder in meinem 10 Jahre alten IDE-Version".

Wie ist das beim ARC denn jetzt nun mit den Weak-Pointern?
Also ich finde es gut das man langsam auch solche Möglichkeiten bekommt. Man kann zwar auch ohne solche Arbeiten, aber die Implementierungen sind umfangreicher und auch fehlerhafter als solche weak-Pointer.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 18:07
Wie gesagt, bis runter D2006 geh aktuell noch mit, aber man sieht immer wieder, wie viele "alte" Delphis noch unterwegs sind.

Mir ist ja auch ein aktuelles Delphi einfach zu teuer.
OK, ich könnte vielleicht noch versuchen an ein XE4 ranzukommen, aber ich seh keinen Nutzen darin.

Da ich mir XE4 wo anders ansah, bekam ich nicht mit, daß ich vergaß mir die eigene XE4-Lizenz über meinen XE3-Wartungsvertrag zu holen und nach Ablauf kommt man da ja nicht rein.
Aber wozu die Mühe? iOS hilft mir absolut nix, da ich sowas nicht besitze und mein neues Android-Handy wird nicht unterstützt. Und das obwohl ich den Wartungsvertrag extra deswegen ausprobierte, da es ja so aussah, daß es da schon drin sein könnte.




Also aktuell sieht es so aus, als wenn ich den ARC-Mist irgnorieren sollte und dann komplett nur noch durchgängig mit Interfaces arbeiten sollte.
Obwohl es bestimmt schön wäre, wenn man irgendwann die Interface-Zwischenchicht weglassen könnte und nur noch über ARC geht. => Kein doppeltes Entwickeln von Interfaces ... einmal vom Objekt und dann nochtmal das Interface, da man sich Interfaces nicht automatisch aus dem Public-Teil eines Objektes generieren lassen kann.

Wie sieht das eigentlich in anderen Programmiersprachen mit Interfaces und "Objekten" aus?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Cross-Platform-Komponenten etwickeln?

  Alt 22. Dez 2013, 17:45
Leider nicht. Gerade zur Laufzeit erstellte Komponenten erhalten so viele Referenzen, dass ARC das nicht mehr mitbekommt. Dort ist dann Release zu verwenden.[/QUOTE]
Also ich kenn nur die Aussage das man Release für Nicht-Modale Dialoge verwenden soll. Für alles andere reicht ein Free.


Für Komponenten sollte man schon immer Release verwenden (habe ich aber erst bei einer Schulung von Deveperts gelernt)
Wie soll das gehen wenn TComponent gar keine Release-Methode hat

Da habe ich bei einen Delphi 5 Projekt nun keine Schutzverletzung aus heiterem Himmel mehr beim Beenden des Programms!
Ich Tipp hier eher auf das Umschiffen eines anderen (eigenen/VCL) Programmfehlers.
Z.B. gabs bei uns mit D5 sporatische Abstürze mit einem DB-Projekt. Bis ich heraus gefunden hat das in der BDE knallhart auf Screen.Curser zugegriffen wurde obwohl beim beenden die Screen-Instanz schon freigegeben war.

Zu den Stringbehandlungen kann ich folgenden Tipp geben:
Delphi-Quellcode:

x: string;


   {$IFDEF NEXTGEN}
   for i:= 0 to Length(x)-1 do begin
   {$ELSE}
   for i:= 1 to Length(x) do begin
   {$ENDIF}
Und was spricht gegen die dafür vorgesehenen Helper-Klassen? Ein Code der mit tausenden NEXTGEN-Ifdefs durchsäht ist, ist nicht gerade übersichtlich und einfachz zu pflegen. Haben hier noch 1-2 Bibliothekten (in älterer Version) die noch mit VCL.NET-Code "verseucht" sind.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.261 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Cross-Platform-Komponenten etwickeln?

  Alt 23. Dez 2013, 08:27
Zitat:
Also ich kenn nur die Aussage das man Release für Nicht-Modale Dialoge verwenden soll. Für alles andere reicht ein Free.

Wie soll das gehen wenn TComponent gar keine Release-Methode hat
Ganz cool, Release halt nicht Tcomponent, aber für alle Komponenten die eine Ereignisbehandling haben, Du weist schon wie ich das meine; also keine Erbsen zählen.

Zitat:
Ich Tipp hier eher auf das Umschiffen eines anderen (eigenen/VCL) Programmfehlers.
Z.B. gabs bei uns mit D5 sporatische Abstürze mit einem DB-Projekt. Bis ich heraus gefunden hat das in der BDE knallhart auf Screen.Curser zugegriffen wurde obwohl beim beenden die Screen-Instanz schon freigegeben war.
Ja sowas in der Art meine ich. Dinger von anderen die Irgendwas irgendwann machen wo man nicht mehr Debuggen kann. Hier hat Release gute Dienste geleistet, wo ich vorher mal das Programm 100 Application.ProcessMessages laufen ließ um die Probleme in den Griff zu bekommen!



Zitat:
Und was spricht gegen die dafür vorgesehenen Helper-Klassen? Ein Code der mit tausenden NEXTGEN-Ifdefs durchsäht ist, ist nicht gerade übersichtlich und einfachz zu pflegen. Haben hier noch 1-2 Bibliothekten (in älterer Version) die noch mit VCL.NET-Code "verseucht" sind.
Kann man sicher machen, ich habe nur meine Lösung aufgezeigt. Dein Beispiel was Du hier mit der Helperclasse aufgezeigt hast geht NICHT bei den Mobilen Geräten da hier der String bei 1 und nicht bei 0 anfängt! Ob das Beispiel von SirRufo geht kann ich nicht sagen, das währe die "sauberste Lösung". Oder am Projektanfang entsprechende Start und Entkonstanten definieren!

Geändert von arnof (23. Dez 2013 um 08:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Cross-Platform-Komponenten etwickeln?

  Alt 23. Dez 2013, 08:59
Ganz cool, Release halt nicht Tcomponent, aber für alle Komponenten die eine Ereignisbehandling haben, Du weist schon wie ich das mine; also keine Erbsen zählen.
Was VCL betrifft kenn ich aber nur das Release am Formular. Sonst primär nur das _Release von Interfaces.
Und für das Formular ist das nur bei Nicht-Modalen nötig. Bei ShowModal sorgt die Implementierung des ShowModal dafür das die MessageQueue schon geleert ist.

Zitat:
Ja sowas in der Art meine ich. Dinger von anderen die Irgendwas irgendwann machen wo man nicht mehr Debuggen kann. Hier hat Release gute Dienste geleistet, wo ich vorher mal das Programm 100 Application.ProcessMessages laufen ließ um die Probleme in den Griff zu bekommen!
Sozusagen als Notfall-Workaround. Hoffentlich auch gut im Code dokumentiert.

Zitat:
Kann man sicher machen, ich habe nur meine Lösung aufgezeigt. Dein Beispiel was Du hier mit der Helperclasse aufgezeigt hast geht NICHT bei den Mobilen Geräten da hier der String bei 1 und nicht bei 0 anfängt!
Wieso sollte das nicht gehen. In der Doku steht:
Code:
Record helper that provides functions and properties for working with all strings, including both 1-based and 0-based strings.
Also genau für das Problem der 0 und 1-Basierten Strings.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Cross-Platform-Komponenten etwickeln?

  Alt 23. Dez 2013, 09:15
Im Detail kann ich hier nichts beitragen aber grundsätzlich hätte ich nichts gegen einen kompletten Bruch mit den Altlasten, wenn es dafür
- eine Vereinheitlichung der Konzepte und
- einfachere und bessere Programmiermöglichkeiten
gäbe.

Man hätte dann halt Delphi XEn für die Wartung alter Projekte und Delphi XY für neue, hypergeile Neuprojekte.

Hier so, dort so und vielleicht doch wieder anders ist eher verwirrend...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Cross-Platform-Komponenten etwickeln?

  Alt 23. Dez 2013, 09:28
Im Detail kann ich hier nichts beitragen aber grundsätzlich hätte ich nichts gegen einen kompletten Bruch mit den Altlasten, wenn es dafür
- eine Vereinheitlichung der Konzepte und
- einfachere und bessere Programmiermöglichkeiten
gäbe.

Man hätte dann halt Delphi XEn für die Wartung alter Projekte und Delphi XY für neue, hypergeile Neuprojekte.

Hier so, dort so und vielleicht doch wieder anders ist eher verwirrend...
Kann man jetzt schon machen. Delphi XEn für Altprojekte und Oxygene für neu Projekte (Oder bei MS: VB für Altprojekte und VB.NET für Neuprojekte)

Ich denke ein schneller harter Schnitt ist zu viel. Hier sollte schon die Möglichkeit geben bestehenden Code über 3-4 Versionen auf eine neue Basis zu heben.
Emba muss nur halt den Schnitt durchziehen Altlasten auch wirklich abzukünden. So ist ein Mitgeschleppte BDE als Beispiel nicht gerade animieren überhaupt diese Altlasten im Code anzugehen wenn man weiß das es doch nicht rausgeschmissen wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 08:03 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