Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   System.JSON System enthält kein Element names JSON (XE8)) (https://www.delphipraxis.net/190721-system-json-system-enthaelt-kein-element-names-json-xe8.html)

leonreiser 31. Okt 2016 16:17

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

Uwe Raabe 31. Okt 2016 16:29

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.

leonreiser 31. Okt 2016 16:38

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:

Zitat von Uwe Raabe (Beitrag 1352313)
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.

Ich habe einmal testweise einfach ein neues Projekt erstellt, um Probleme mit dem Orginal-Projekt auszuschließen.
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?

Uwe Raabe 31. Okt 2016 17:38

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.

jaenicke 1. Nov 2016 03:00

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?

leonreiser 2. Nov 2016 14:22

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1352315)
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.

Also System.JSON.dcu ist in dem angegebenen Verzeichnis. Daran liegt es also nicht.

leonreiser 2. Nov 2016 14:25

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von jaenicke (Beitrag 1352330)
Wo wird der Fehler denn angezeigt? Also in welcher Codezeile? Oben in der uses?

Ja, das Problem/unterringelte ist in der Uses.
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.

Uwe Raabe 2. Nov 2016 14:45

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von leonreiser (Beitrag 1352442)
Ja, das Problem/unterringelte ist in der Uses.

Compiliert es denn trotzdem? Die roten Wellen sind gelegentlich schon mal False-Positives.

leonreiser 2. Nov 2016 14:48

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1352444)
Zitat:

Zitat von leonreiser (Beitrag 1352442)
Ja, das Problem/unterringelte ist in der Uses.

Compiliert es denn trotzdem? Die roten Wellen sind gelegentlich schon mal False-Positives.

Also mit System.JSON compiliert es, wenn ich aber

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

Uwe Raabe 2. Nov 2016 14:54

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von leonreiser (Beitrag 1352446)
Also mit System.JSON compiliert es, wenn ich aber

System.JSON.Types
System.JSON.Writers
und
System.JSON.Builders
der uses hinzufüge dann nichtmehr.

Das liegt aber daran, daß diese Units in XE8 eben nicht vorhanden sind. Die sind erst mit Seattle dazugekommen.

leonreiser 2. Nov 2016 15:22

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1352448)
Das liegt aber daran, daß diese Units in XE8 eben nicht vorhanden sind. Die sind erst mit Seattle dazugekommen.

Okay, hier liegt anscheinend der Hund begraben.
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)?

himitsu 2. Nov 2016 15:52

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.

leonreiser 2. Nov 2016 15:57

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von himitsu (Beitrag 1352458)
Das klappt natürlich nicht.
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.

Und wenn ich dann herausgefunden habe, in welchen Units die JSON-Komponenten sind, dann füge ich die als
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.

bra 2. Nov 2016 16:02

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von leonreiser (Beitrag 1352460)
Und wenn ich dann herausgefunden habe, in welchen Units die JSON-Komponenten sind, dann füge ich die als
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.

Warum willst du unbedingt die JSON-Komponente von Berlin in XE8 verwenden? Das wird vermutlich nicht ohne größeren Aufwand funktionieren. Nimm doch die bei XE8 enthalten JSON-Komponente und verwende sie entsprechend der Hilfe von XE8.

leonreiser 2. Nov 2016 16:10

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Oke, dann muss ich wohl einsehen, dass das so nicht funktionieren wird.

Zitat:

Zitat von bra (Beitrag 1352462)
Warum willst du unbedingt die JSON-Komponente von Berlin in XE8 verwenden? Das wird vermutlich nicht ohne größeren Aufwand funktionieren. Nimm doch die bei XE8 enthalten JSON-Komponente und verwende sie entsprechend der Hilfe von XE8.

Mir selbst ist der Hersteller der Komponente eigentlich total egal, besonders weil ich garnicht damit arbeite.
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.

himitsu 2. Nov 2016 16:24

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.

leonreiser 3. Nov 2016 16:34

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von himitsu (Beitrag 1352467)
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.

Ähm ist mit user jetzt uses gemeint?

Uwe Raabe 3. Nov 2016 17:08

AW: System.JSON System enthält kein Element names JSON (XE8))
 
Zitat:

Zitat von himitsu (Beitrag 1352467)
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.

Wie sollte ein Compiler für XE7 oder vorher, bei dem CompilerVersion < 290 ist, denn ein Define für DelphiXE8 oder DelphiXE8AndLower bereitstellen? Der aktuelle Compiler kann ja auch nicht wissen, wie die Version in drei Jahren heißen wird.

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.

himitsu 3. Nov 2016 18:17

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)

jaenicke 3. Nov 2016 18:33

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

himitsu 3. Nov 2016 18:43

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:
{$IF (CompilerVersion >= DelphiXE2) and (CompilerVersion <= DelphiXE5)} ... {$ENDIF}
machen.

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:

Habe ich schon erwähnt, daß IFDEFs in uses-Anweisungen eine Erfindung des Teufels sind?
Eigentlich gibt es immer nur Probleme in der DPR damit, weil Delphi und Addons/GExperts/CnPack da zwar gern drin zumschreiben, aber dabei leider ständig Defines und sogar Kommentare geschrottet werden, wie bei fast allem Anderen in der DPR auch.


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