![]() |
Cross-Platform-Komponenten etwickeln?
Witzig, grade eben wollte ich das auch fragen :lol:
![]() Allerdings mehr in Bezug auf die RTL, alsnstat auf die VCL FMX. (Warum heißt das eigentlich nicht XCL? :gruebel:) Hier fing das ja schonmal an. ![]() Probleme für gemeinsam verwendeten Code, durch verändertes Verhalten bei der String-Indizierung. Wie sieht das aber mit den Klassen aus? Wenn ich das wichtig mitbekommen hab, dann wurden im iOS und vermutlich auch beim Android die Klassen um eine Referenzzählung (ARC) erweitert und das Free ist nur noch eine Dummy-Prozedur (zur Code-Kompatibilität), die aber nichts mehr macht. (Der direkte Aufruf von Destroy ist nun also erst Recht ein Fauxpas) ![]() In OSX gibt es kein ARC? In Windows wollte ich eine Komponente auf Interfaces umstellen, aber wenn die automatische Zählung im mobilen Bereich nun direkt geht: Ist es dann besser, dort das direkt als Klassen zu lassen und/oder wie sieht es dort mit den Interfaces aus? Und wie sieht das mit dem Variant aus? Hat der im Mobilen irgendwelche Nachteile? Im Windows hatte Borland dort ja einige delphieigene Typen "reingehackt". |
AW: Cross-Platform-Komponenten etwickeln?
Bei Strings nimm anstatt
Delphi-Quellcode:
dieses (hab es nicht probiert, müsste aber gehen)
for i := 1 to Length( str ) do
begin end;
Delphi-Quellcode:
Nimm bei Klassen
for i := Low( str ) to High( str ) do
begin end;
Delphi-Quellcode:
das passt dann immer ;)
FreeAndNil
Interfaces sind von der Behandlung gleich. |
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
![]() Die korrekte gleiche Verwendung (wie auch in der Hilfe als Beispiel vorhanden) wäre:
Delphi-Quellcode:
for I:= 0 to MyString.Length - 1 do
Write(MyString.Chars[I]); Zitat:
![]() |
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
|
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
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} |
AW: Cross-Platform-Komponenten etwickeln?
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. ![]() ![]() 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. |
AW: Cross-Platform-Komponenten etwickeln?
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. Zitat:
Zitat:
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. Zitat:
|
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
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". Zitat:
|
AW: Cross-Platform-Komponenten etwickeln?
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? |
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
Zitat:
Zitat:
|
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
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:
Zitat:
Code:
Also genau für das Problem der 0 und 1-Basierten Strings.
Record helper that provides functions and properties for working with all strings, including both 1-based and 0-based strings.
|
AW: Cross-Platform-Komponenten etwickeln?
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... |
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
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. |
AW: Cross-Platform-Komponenten etwickeln?
Das Release ist kein Allheilmittel. Es wird nur "manchmal" benötigt, da nach dem Ausführen von "abhängigen" Events nochmals auf die Form/Komponente zugegriffen wird und wenn man die Form vorher Freigibt, dann knallt es nunmal danach.
Release sendet dagegen nur eine "Schließ dich"-Message, welche dann "irgendwann" später ausgelöst wird, sobald die Verarbeitung bei der Message vorbei kommt.
Delphi-Quellcode:
Form.Release;
... Application.ProgressMessages; ... greif jetzt nochmal auf Form zu und es knallt
Delphi-Quellcode:
Form.Release;
... erstelle modalen Dialog (z.B. ShowMessage), welcher sich an die ActiveForm hängt, was eventuell immernoch die "Form" ist, da sie noch existiert ... Die Form wird später freigegeben, nimmt den Dialog mit in den Abgrund und du wunderst dich, warum der Dialog nicht angezeigt wird, bzw. nur ein paar Millisekunden da ist, falls er noch Zeit hat sich zu zeichnen Selbst bei diesen Helpern darf man nicht mit festen Indize arbeiten. Der TStringHelper hat "diesbezüglich" absolut keinen Vorteil geüber den "normalen" Funktionen, außer daß dort diese alten Funktionen als Methoden direkt am String hängen. Aber, so erwischt man wenigstens ncith die falsche Funktion. für UnicodeString muß man weiterhin die Ansi-Funktion verwenden (AnsiSameText), wärend die SameTextFunktion nur für ASCII funktioniert und man für ANSI erstmal die AnsiStrings-Unit einbinden muß, wo es eine weitee Real-AnsiSameText-Funktion findet. Man muß sich aber dennoch die Char-Indize durchgehend über die Helper besorgen und auch an diesen weitergeben, also genauso, wie bei den Funktionen, halt via Low den Anfang, sonst stimmt der Index nirgendwo. 0 oder 1 - Also Entweder man entwickelt nun alles neu und macht es gleich X-Plattform-fähig - oder man entwickelt nur das aktuell Wichtige nurr für Mobil neu und hat dann zwei Versionen zu pflegen - oder man CompilerSwitcht seine Mobile-Anwendung auf 1, kann den Altcode weiterverwenden, hat seine neue Anwendung damit so an altcode gebunden, daß man sie nicht mehr auf Neu zurückstellen kann. Oder seh ich das jetzt falsch? Zitat:
Dieses Schwammige 0-1-Problemchen lässt sich ja noch lösen. Bei den Objektreferenzen muß ich noch schauen ob/wie sich das lösen läst. |
AW: Cross-Platform-Komponenten etwickeln?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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