AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls JCL und JVCL in 10.3 CommunityEdition installieren geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

Ein Thema von DieDolly · begonnen am 21. Nov 2018 · letzter Beitrag vom 24. Nov 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#1

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 22. Nov 2018, 05:06
Bezüglich des Kompilierfehlers hilft es übrigens meinen Fork zu benutzen:
https://github.com/jaenicke/jvcl
Pull Request ist draußen:
https://github.com/project-jedi/jvcl/pull/52

Bezüglich der Versionsangaben:
Besser man prüft auf alle bekannten Versionen und geht ansonsten von einer neueren aus. Dann muss man nicht bei jeder Version sofort die Versions-inc aktualisieren... (sondern erst wenn man auf eine bestimmte neue Version prüfen muss)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 22. Nov 2018, 07:58
Bezüglich der Versionsangaben:
Besser man prüft auf alle bekannten Versionen und geht ansonsten von einer neueren aus. Dann muss man nicht bei jeder Version sofort die Versions-inc aktualisieren... (sondern erst wenn man auf eine bestimmte neue Version prüfen muss)
Eine neue Version von was? Dein Vorschlag funktioniert vielleicht, wenn man nur mit Delphi arbeitet. Wenn Du auch andere Compiler unterstützt, wird es sehr schwierig. Es wäre einfacher, wenn Delphi zB das Symbol DELPHI definieren würde (http://docwiki.embarcadero.com/RADSt...n_%28Delphi%29), ähnlich wie FreePascal mit FPC.

Da Du schon zum wiederholten Male dieses Thema ansprichst ohne Code zu zeigen, wäre ich an einer Implementation interessiert, die ohne $IF oder Conditional Expressions auskommt, sprich die alle Versionen von TP5 bis Delphi Rio und FPC331 (in allen Modi) unterstützt (selbst die allerneueste FPC Version 3.3.1 kennt zB kein Result im Default-Modus).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#3

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 23. Nov 2018, 20:18
Die Änderungen sind jetzt übrigens gemerged, das normale JVCL Repository sollte nun fehlerfrei kompilieren, tut es hier zumindest überall.

Da Du schon zum wiederholten Male dieses Thema ansprichst ohne Code zu zeigen, wäre ich an einer Implementation interessiert, die ohne $IF oder Conditional Expressions auskommt, sprich die alle Versionen von TP5 bis Delphi Rio und FPC331 (in allen Modi) unterstützt (selbst die allerneueste FPC Version 3.3.1 kennt zB kein Result im Default-Modus).
Ich arbeite nur mit Delphi, da ist es sehr einfach:
https://github.com/jaenicke/MTCL/blo...erVersions.inc
Ich habe einmal eine umfangreichere Variante erstellt, die kann ich allerdings nicht veröffentlichen. Vielleicht schreibe ich so etwas aber noch einmal privat und richtig sauber.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (23. Nov 2018 um 20:21 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 23. Nov 2018, 22:13
Ich arbeite nur mit Delphi, da ist es sehr einfach:
https://github.com/jaenicke/MTCL/blo...erVersions.inc
Danke für den Link. Aber neben Eindruck, dass das ziemlich verschachtelt ist, sehe ich auf den ersten Blick nicht wie es gegen unbekannte Versionen helfen kann (oder übersehe ich da was Offensichtliches?)

Nehmen wir an, ich habe die Includedatei in einem Archiv, das zu Zeiten von XE veröffentlicht wurde. Wenn jemand, das jetzt mit Rio übersetzt, ist Rio doch nicht bekannt, und auch nicht die speziellen nötigen Anpassungen (ich denke zB an Auslesen des DecimalSeparator).

Ich kann natürlich ein Rio-Version der INC veröffentlichen, aber das ist genau das, was ich ja auch so mache.

Meine INC ist nicht so sehr auf Versionen konzentriert sondern auf Features, wie zB sind Unit-Scopes vorhanden, sind Typecasts für Fließkommakonstanten erlaubt etc.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#5

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 23. Nov 2018, 23:42
Nehmen wir an, ich habe die Includedatei in einem Archiv, das zu Zeiten von XE veröffentlicht wurde. Wenn jemand, das jetzt mit Rio übersetzt, ist Rio doch nicht bekannt, und auch nicht die speziellen nötigen Anpassungen (ich denke zB an Auslesen des DecimalSeparator).
Ich habe die besten Erfahrungen gemacht, wenn ich die bedingten Abschnitte auf die alten Versionen beziehe. Z.B. gibt es die function GetProductVersion in System.Sysutils.pas erst ab Delphi 10 Seattle. Damit der Code auch in älteren Versionen funktioniert, gibt es an geeigneter Stelle folgende Sequenz:
Delphi-Quellcode:
{$IF RTLVersion < 30.0 Seattle}
function GetProductVersion(const AFileName: string; var AMajor, AMinor, ABuild: Cardinal): Boolean;
var
  FileName: string;
  InfoSize, Wnd: DWORD;
  VerBuf: Pointer;
  FI: PVSFixedFileInfo;
  VerSize: DWORD;
begin
  Result := False;
  // GetFileVersionInfo modifies the filename parameter data while parsing.
  // Copy the string const into a local variable to create a writeable copy.
  FileName := AFileName;
  UniqueString(FileName);
  InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
  if InfoSize <> 0 then
  begin
    GetMem(VerBuf, InfoSize);
    try
      if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
        if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
        begin
          AMajor := HiWord(FI.dwProductVersionMS);
          AMinor := LoWord(FI.dwProductVersionMS);
          ABuild := HiWord(FI.dwProductVersionLS);
          Result:= True;
        end;
    finally
      FreeMem(VerBuf);
    end;
  end;
end;
{$IFEND}
Ein anderes Beispiel aus PngComponents. Die Klasse TPngImage gibt es erst seit Delphi 2009 (vorher hieß es TPNGObject) und der Code läuft nur unter Delphi 7 und höher. Daher gibt es dort folgende Sequenz:
Delphi-Quellcode:
{$IF RTLVersion < 20.0 D2009 }
  {$IF RTLVersion < 15.0 D7 }
    PngComponents are only compatible with Delphi 7 and higher!
  {$IFEND}
type
  TPngImage = TPNGObject;
{$IFEND}
Hier noch ein paar Auszüge aus dem Project Magician:
Delphi-Quellcode:
function CompareNatural(const Key1, Key2: string): Integer;
{$IF RTLVersion < 27.0 XE6}
  function CheckCfg(const Key: string; out idx: Integer): Boolean;
  const
    cCfg = 'Cfg_';
  begin
    Result := StartsStr(cCfg, Key) and TryStrToInt(Copy(Key, 5), idx);
  end;

var
  idx1: Integer;
  idx2: Integer;
{$IFEND}
begin
{$IF RTLVersion < 27.0 XE6 }
  if CheckCfg(key1, idx1) and CheckCfg(key2, idx2) then begin
    Result := CompareValue(idx1, idx2);
  end
  else begin
    result := CompareText(key1, key2);
  end;
{$ELSE}
  Result := string.Compare(Key1, Key2, [coDigitAsNumbers, coIgnoreCase]);
{$IFEND}
end;
Delphi-Quellcode:
class function TCustomProjFile.GetKnownPlatforms: TArray<string>;
begin
  if FKnownPlatforms = nil then begin
    FKnownPlatforms := TArray<string>.Create(
      'Win32', 'Win64', 'OSX32', 'iOSSimulator', 'Android'
      {$IF RTLVersion < 29.0 XE8 }
      , 'iOSDevice'
      {$ELSE}
      , 'iOSDevice32', 'Linux64', 'iOSDevice64'
      {$ENDIF}
      );
  end;
  result := FKnownPlatforms;
end;
Delphi-Quellcode:
      if not moduleIsPackage and AConfig.ClearChildAppSettings then begin
        { only base platform configurations have app settings and must keep them }
        if Arg.Parent.Key = buildConfiguration.Key then Exit;

        Arg.Remove(sOutputExt);
        Arg.Remove(sIcon_MainIcon);
        Arg.Remove(sIcns_MainIcns);
        Arg.Remove(sManifest_File);
        {$IF RTLVersion >= 30.0 Seattle}
        Arg.Remove(sAppEnableRuntimeThemes);
        Arg.Remove(sAppEnableHighDPI);
        Arg.Remove(sAppEnableAdministrator);
        Arg.Remove(sCustom_Styles);
        {$ENDIF}
      end;

Alle diese Konstrukte benötigen nicht die tatsächlichen VERxxx Bedingungen und compilieren in der Regel ohne Änderungen auf einer neuen Delphi Version. Deswegen kommen die Projekte auch ohne sowas wie die JEDI.inc oder COMPILERS.inc oder wie sie alle heißen aus.

Wenn irgendwas mit einer neuen Version nicht compiliert, wird die aktuelle Version des betreffenden Codes in ein passendes $IF-Konstrukt eingepackt, das den neuen Compiler und alle zukünftigen ausschließt und der verbleibende Code wird für den neuen Compiler angepasst, gegebenenfalls im ELSE Teil. Damit habe ich wieder für die nächsten Jahre Ruhe.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#6

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 24. Nov 2018, 04:10
Ja, das mache ich intern auch so. Dass man da die Delphiversionen einfach so dahinter schreiben kann ohne dass es die Funktionalität beeinträchtigt, wusste ich nicht. Ich habe die eigenen Konstanten auch aus Gründen der Lesbarkeit benutzt und zudem in einer anderen Version eben auch noch bestimmte Features als DEFINE angeboten um so darauf direkt prüfen zu können ohne jedesmal zu überlegen wo es das noch einmal gab.

Ich arbeite nur mit Delphi, da ist es sehr einfach:
https://github.com/jaenicke/MTCL/blo...erVersions.inc
Danke für den Link. Aber neben Eindruck, dass das ziemlich verschachtelt ist, sehe ich auf den ersten Blick nicht wie es gegen unbekannte Versionen helfen kann (oder übersehe ich da was Offensichtliches?)
Jetzt bei 10.3 spuckt das Ding einfach aus Delphi10TokyoUp.

// EDIT:
Ich habe 10.3 mal auch direkt hinzugefügt.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (24. Nov 2018 um 05:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#7

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 24. Nov 2018, 09:29
Dass man da die Delphiversionen einfach so dahinter schreiben kann ohne dass es die Funktionalität beeinträchtigt, wusste ich nicht.
Das habe ich auch nur durch Zufall herausgefunden. Der Compiler hört einfach nach dem Erkennen einer Floatzahl auf und überliest den Rest bis zur schließenden Kommentarklammer. Das manuelle Einfügen des Klartextes ist in der Regel auch kein Problem, da man in dem Moment ja genau weiß, warum man das tut und welche Delphi-Version betroffen ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#8

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 22. Nov 2018, 08:00
Eigentlich dürfte der nicht übernommen werden, denn du verwendest {$ifend} anstatt {$ENDIF} und das kann nicht jeder Compiler.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#9

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 22. Nov 2018, 08:21
Eigentlich dürfte der nicht übernommen werden, denn du verwendest {$ifend} anstatt {$ENDIF} und das kann nicht jeder Compiler.
Sollte das nicht innerhalb des IFDEF für Delphi 2009 gehen? Ich habe keine alte Version zum Testen...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#10

AW: JCL und JVCL in 10.3 CommunityEdition installieren geht nicht

  Alt 22. Nov 2018, 08:41
denn du verwendest {$ifend} anstatt {$ENDIF} und das kann nicht jeder Compiler.
Sollte das nicht genau andersherum heißen? Delphi-Compiler vor XE4 verstehen kein $ENDIF als Abschluss für $IF, aber $IFEND verstehen alle (ab Delphi 6 natürlich, vorher gab es kein $IF).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 04: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