![]() |
System.JSON System enthält kein Element names JSON (XE8))
Hallo Leute,
Ich wollte heute ein Projekt eines Kollegen öffnen, was auch geklappt hat, jedoch kann ich jetzt nicht kompilieren, mit der Fehlermeldung "System.JSON System enthält kein Element names JSON". Erst dachte ich dass es an der Delphiversion liegt(Kollege hat 10.1 Berlin und ich XE8), jedoch habe ich im Internet gesehen, dass JSON Support bei XE8 dabei ist. In der JSON Dokumentation steht, dass JSON in der rtl240.bpl liegt. Ich habe die Datei nun unter C:\Program Files (x86)\Embarcadero\Studio\16.0\bin\ gesucht, aber nicht gefunden. Nur rtl220.bpl ist da. Bei meinem Kollegen gibt es die rtl240.bpl. Nun meine Frage/n: 1: Reicht es einfach die rtl240.bpl in das bin Verzeichnis zu kopieren? 2: Ist das überhaupt zulässig, oder kopiere ich mir da Content für den ich eigentlich nicht bezahlt habe? 3: Warum funktioniert dass nicht mit XE8, obwohl es ja einfach funktionieren müsste(also System.JSON...)? Ich hoffe die Frage ist verständlich formuliert, falls nicht, einfach nachfragen. Grüße Leon |
AW: System.JSON System enthält kein Element names JSON (XE8))
Die rtl240.bpl gehört zu Delphi 10.1 Berlin, die rtl220.bpl dagegen zu XE8. Also hilft es gar nichts, die rtl240.bpl auf dein System zu kopieren.
Wenn du das Projekt nicht compilieren kannst, dann hat das auch eher wenig mit den Packages (bpl) zu tun. System.JSON ist aber auch in XE8 enthalten, daher kann ich die Fehlermeldung nicht so recht interpretieren. Eventuell solltest du die dproj-Datei löschen und in XE8 neu erzeugen lassen. Eventuell passt dort etwas nicht. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Danke erstmal für die schnelle Antwort.
Dass das reine kopieren nicht klappt, habe ich bemerkt. Habs versucht und hat nicht funktioniert. Zitat:
Aber wenn ich nun System.JSON aufrufen will, habe ich wieder das gleiche Problem. Also "System" geht natürlich und ich bekomme auch von "System.Boolean" bis "System.SysUtils" jede menge vorgeschlagen, aber .JSON ist nicht dabei. Also das JSON nicht bei XE8 dabei ist, kann eigentlich wirklich nicht sein, weil ich mich beim Kauf von meiner Delphi-Version extra darüber informiert habe, da es eine Art KO Kriterium war, weil JSON Support in meinem Fall nunmal auf jeden Fall benötigt wird. Kann es sein dass ich erst noch Extensions vom edn herunterladen muss oder ähnliches? |
AW: System.JSON System enthält kein Element names JSON (XE8))
Schau doch mal, ob du unter c:\Program Files (x86)\Embarcadero\Studio\16.0\lib\win32\release\ (oder das entsprechende Verzeichnis bei dir) eine System.JSON.dcu liegt.
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Wo wird der Fehler denn angezeigt? Also in welcher Codezeile? Oben in der uses?
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
Ich habe nun mal ein bisschen aufgeräumt und System.JSON wird auch plötzlich erkannt, jedoch: System.JSON.Types System.JSON.Writers System.JSON.Builders kennt Delphi immernoch nicht. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
System.JSON.Types System.JSON.Writers und System.JSON.Builders der uses hinzufüge dann nichtmehr. Ich bekomme dann die Fehler: Unit-Name 'System.JSON.Types' kann nicht aufgelöst werden Unit-Name 'System.JSON.Writers' kann nicht aufgelöst werden Unit-Name 'System.JSON.Builders' kann nicht aufgelöst werden |
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
Mein nächster Versuch war nun alle System.JSON.* Dateien aus dem Ordner C:\Program Files (x86)\Embarcadero\Studio\16.0\lib\win32\release meines Kollegen in meinen zu kopieren. Da sind unter anderem auch System.JSON.Writers.dcu System.JSON.Builders.dcu und System.JSON.Writers.dcu dabei. Hat jedoch wie erwartet nicht so einfach geklappt. Gibt es da trotzdem eine Möglichkeit. Muss ich villeicht noch was in der Registry, oder in irgendeinem INI File was verändern, oder ist das ganze sowieso unmöglich weil XE8 nicht damit umgehen kann (oder was auch immer)? |
AW: System.JSON System enthält kein Element names JSON (XE8))
Das klappt natürlich nicht.
DCUs sind compilerabhängig. DCUs aus XE10.1 werden niemals in XE8 funktionieren können. Abgesehn davon bauen diese Kompilate (DCUs) auf andere Units auf, bzw. hängen davon ab, die im XE8 ganz anders sind, als in XE10. Lösung: Schau, wo und in welchen Units im X8 die JSON-Komponenten drin sind (Dateisuche und/oder in der OH suchen) Oder verwende die JSON-Komponente eines anderen Herstellers. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
Unit dem Projekt hinzu und dann kann ich sie verwenden ,oder wie ist das gemeint? JSON-Komponente eines anderen Herstellers geht leider nicht, da wir durch das Projekt an diese Komponente gebunden sind. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Oke, dann muss ich wohl einsehen, dass das so nicht funktionieren wird.
Zitat:
Aber das derzeitige Projekt, an dem ich etwas ändern soll, benutzt eben diese Komponente und ich kann das Programm nicht testen/compilieren, da ich den entsprechenden Part zwar auskommentieren kann(um das Projekt kompilierbar zu machen), dieser jedoch maßgeblich zur Funktionalität beiträgt. Aber naja, da kann man dann wohl wenig machen. Trotzdem Danke an alle, für die schnelle Hilfe. |
AW: System.JSON System enthält kein Element names JSON (XE8))
In diesem Fall halt ins Uses 'nen IFDEF rein.
Delphi-Quellcode:
user AndereUnits, {$IFDEF VER290} XE8Units {$ELSE} XE10Units {$ENDIF};
Aber ich bin mehr für Größer/Kleiner-Vergleiche oder besser noch für sprechende Bezeichner.
Delphi-Quellcode:
user AndereUnits, {$IF CompilerVersion <= 290} XE8Units {$ELSE} XE10Units {$ENDIF};
Delphi-Quellcode:
user AndereUnits, {$IF CompilerVersion <= DelphiXE8} XE8Units {$ELSE} XE10Units {$ENDIF};
Delphi-Quellcode:
user AndereUnits, {$IFDEF DelphiXE8AndLower} XE8Units {$ELSE} XE10Units {$ENDIF};
Letzte Beiden geht leider nur mit Fremdcode, da Delphi diesbezüglich keine sprechenden DEFINES bereitstellt. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
|
AW: System.JSON System enthält kein Element names JSON (XE8))
Zitat:
Alternativ kann man aber die fehlenden Units auch einfach als leere Dummy-Units anlegen. Dann ist der Compiler auch zufrieden und man spart sich die IFDEFS. (Habe ich schon erwähnt, daß IFDEFs in uses-Anweisungen eine Erfindung des Teufels :twisted: sind?) Man kann auch für die fehlenden Units Unit-Aliase im XE8-Projekt anlegen, die dann alle auf System.JSON verweisen. |
AW: System.JSON System enthält kein Element names JSON (XE8))
Nee, das nicht, aber man kann problemlos die "Versionskonstanten" der nächsten 2, 3, 4 oder mehr Jahre vorbelegen
und zwar entweder eine Nummer größer als man selber oder besser noch mit einer ganz großen Nummer wie z.B. 666.0 :oops: Alles was größer ist als ich muß ich nicht ganz genau kennen ... es ist so oder so immer größer und um wie viel größer ist eigentlich egal. Man könnte auch bestimmte Versionsnummern erraten, aber das geht dann schief, wenn mal wieder jemand da dran rumspielt. Zwischennummern für Majorversionen oder Versionen überspringen, wie es zweimal mit Version 13 gemacht wurde. Delphi 10.3 wird vermutlich Compilerversion 33.0 und Produktversion 26.0, bzw. IDE-Version 20.0, da die 10.1 eine 31.0/24.0/18.0 ist. Aber Delphi 2009 war Produktversion 12.0 und 2010ist eine 14.0, weil man Angst vor der 13 hatte. Oder auch XE8 zu DX10, bzw. Windows 8 und Windows 10 .... Das einzige Problem ist dabei nur, wenn man auf die geile Idee kommt und das Benamungsschema ständig ändert. Aber Emba kann auch einfach seine Möglichkeiten nutzen und soeine Editions-Liste/Unit in die Versionsverwaltung legen, welche auch ältere Delphis als "Update" bekommen könnten. (GetIt, bzw. Git/SVN, wo auch schon die Demos liegen) |
AW: System.JSON System enthält kein Element names JSON (XE8))
Man braucht doch gar keine Versionskonstanten für zukünftige Versionen, es würde ja reichen, wenn so etwas ginge:
Delphi-Quellcode:
{$IFDEF DelphiXE8OrHigher}
... |
AW: System.JSON System enthält kein Element names JSON (XE8))
Liste der Anhänge anzeigen (Anzahl: 1)
Jain.
Wenn du Fremdkomponenten und Quellcode auch in älteren Delphis nutzen willst, dann eventuell schon. Ein DEFINE Delphi10_5OrHigher wäre egal, wenn es dein XE8 nicht kennt, aber ein Delphi10OrLower wäre da schon besser, da es XE8 mit einschließt. Wie gesagt, ich verwende lieber Vergleiche statt DEFINES, da kann man auch mal ein schönes
Delphi-Quellcode:
machen.
{$IF (CompilerVersion >= DelphiXE2) and (CompilerVersion <= DelphiXE5)} ... {$ENDIF}
Und wenn ich Delphi 10.4 bis sonstas mit Version 99.9 vordefiniere, kommen auch alte Delphis damit klar, selbst wenn die Unit paar Jahre nicht upgedated wurde. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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