Installierte Komponente fehlt XE2



  • Hallo Zusammen,

    ich benutze die 30 Tage Testversion von C++ Builder XE2, wir werden wohl von BCB5 auf die neue Version umsteigen.
    Nun muss ich für den Test natürlich alle Projekte neu aufsetzen bzw. für die neue Version funktionsfähig machen.

    Nun habe ich ein Projekt, indem Komponenten verwendet werden, die ich nun nachinstallieren muss. Vielleicht kennt ihr diese Komponente:

    http://www.hoerstemeier.com/index_d.htm

    Nun habe ich nach längerem suchen die benötigten Files, die sich auch unter der neuen Version kompilieren lässt, gefunden.

    Ich installiere die Komponenten wie folgt:

    Komponente installieren->
    In ein neues Package installieren(Unit-Dateiname "Aligridr.pas")->
    Name des Packages habe ich mal "test" genannt und C++ Builder Packege ausgwählt

    Anschließend habe ich auf "Fertig stellen" geklickt, alles wurde erfolgreich kompilert und es erscheint die Meldung:

    Package:C:\Dokumente....\test.bpl wurde installiert

    Anschließend habe ich unter
    Komponenten->Packages installieren
    geschaut, ob das Packet vorhanden ist.
    Es wird angezeigt, jedoch wenn ich auf den Button "Komponenten" klicke sehe ich im Fenster "Installierte Komponenten" nichts, bzw. leer.
    Auch in der Komponenten Leiste gibt es keine neuen Einträge.

    Bin nach langer Suche durch Foren und langem selbst ausbrobieren ratlos was ich falsch mache.
    Hat jemand nen Link oder Tipp für mich?

    Hinweis: Auf meinem Testrechner ist nur der XE2 installiert,
    somit schließe ich irgendwelche Konflikte mit älteren
    Borland Bibliotheken oder Registry Einträgen aus aus.



  • mr_crabs schrieb:

    http://www.hoerstemeier.com/index_d.htm

    The 90s called, they want their tiled wallpapers back 😃

    Zuerst deinstallierst du dein Test-Package am besten wieder.

    Dann wirst du wahrscheinlich einiges an der AH_DEF.INC ändern müssen, um neuere Compiler unterstützen zu können. Am schnellsten wäre es, wenn du ganz oben einfach {$DEFINE delphi_6} hinklatschst. Außerdem mußt du zwei verschiedene Packages erstellen, ein Laufzeit- und ein Designpackage. Das Laufzeitpackage (sagen wir, es heißt "StringAlignGrid") beinhaltet dann ALIGRID.PAS, ICONGRID.PAS und AH_TOOL.PAS, das Designpackage (nennen wir es konventionellerweise "dclStringAlignGrid") erhält eine Referenz auf das StringAlignGrid-Package und beinhaltet die Units ALIGRIDR.PAS und ALIGREDI.pas/.dfm. In den Projektoptionen kannst du einstellen, daß das eine Package ein Laufzeit-, das andere nur ein Design-Package sein soll, außerdem kannst du noch für beide Packages einen Suffix angeben (in XE2 wäre der kanonische Suffix "160"), was sinnvoll zur Namenskonfliktvermeidung ist. Dann installierst du das Design-Package und fertig.

    Wenn du RAD Studio verwendest und auch zu kaufen beabsichtigst, solltest du daraus ein Delphi-Package machen. Wird es nur C++Builder, so solltest du mit C++Builder-Packages arbeiten; dann wird es wahrscheinlich erforderlich, in den Projektoptionen zum Design-Package zusätzlich noch "-LUdesignide" unter "Delphi-Compiler|Compilieren|Weitere Optionen für die Übergabe an den Compiler" anzugeben.

    Und mittelfristig wäre es sinnvoll, von dieser Komponente wegzukommen, da sie offensichtlich schon ziemlich lange vernachlässigt wurde.



  • Hallo audacia,

    danke erst mal für deine schnelle antwort.

    Bin die letzten Tagen ununterbrochen an der Sache dran geblieben und habe folgenden Status:

    ich habe in den Projektoptionen auf Laufzeit eingestellt und in den Delphi Optionen -Ludesignide eingetragen.
    Die Datei ah_def.inc mit dem Eintrag $DEFINE delphi_6 ergänzt.

    In meinem Projekt befinden sich die Dateien: ALIGRID.PAS, ICONGRID.PAS, AH_TOOL.PAS

    Wenn ich nun das Projekt kompiliere escheint die Fehlermeldung:
    Datei cotrols.dcu nicht gefunden.

    Im Embarcadero Forum heist es man müsste nur "vcl.controls" davorschreiben.

    Nachdem ich einige Einträge auf diese Weise umbennant habe, hänge ich nun an folgender Fehlermeldung:

    TShowHintEvent(TMethod(ShowHintProcs.Items[i]).methodpointer)(HintStr,CanShow,HintInfo);
    .
    .
    .
    [DCC Fehler]AH_TOOL.PAS:E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
    

    So wie ich das jetzt verstehen gibt es hier einen Konflikt zwischen dem Typ in der Deklaration und des Types in der Parameterübergabe.
    Oder liege ich da falsch?

    Hab mir die Sache irgendwie einfacher vorgestellt 🙂



  • mr_crabs schrieb:

    ich habe in den Projektoptionen auf Laufzeit eingestellt und in den Delphi Optionen -Ludesignide eingetragen.
    Die Datei ah_def.inc mit dem Eintrag $DEFINE delphi_6 ergänzt.

    In meinem Projekt befinden sich die Dateien: ALIGRID.PAS, ICONGRID.PAS, AH_TOOL.PAS

    Du has aber schon gelesen, was ich geschrieben habe, oder?

    Du brauchst zwei Packages, ein Design- und ein Laufzeitpackage.

    Nur das Design-Package bekommt eine Referenz auf das "designide"-Package.

    ALIGRID.PAS, ICONGRID.PAS, AH_TOOL.PAS gehören ins Laufzeitpackage, ALIGRIDR.PAS und ALIGREDI.pas/.dfm ins Design-Package. Beim Design-Package trägst du unter "Erfordert" das Laufzeitpackage ein.

    Noch zu beachten ist, daß bei einer solchen Package-Aufteilung zumindest das Laufzeitpackage ein Delphi-Package sein muß. Wenn du nur C++Builder besitzt, hast du keinen IDE-Support dafür; aber du kannst einfach folgende .dpk-Datei mit einem Editor erstellen

    package StringAlignGrid;
    
    {$R *.res}
    {$ALIGN 8}
    {$ASSERTIONS ON}
    {$BOOLEVAL OFF}
    {$DEBUGINFO OFF}
    {$EXTENDEDSYNTAX ON}
    {$IMPORTEDDATA ON}
    {$IOCHECKS ON}
    {$LOCALSYMBOLS ON}
    {$LONGSTRINGS ON}
    {$OPENSTRINGS ON}
    {$OPTIMIZATION ON}
    {$OVERFLOWCHECKS OFF}
    {$RANGECHECKS OFF}
    {$REFERENCEINFO ON}
    {$SAFEDIVIDE OFF}
    {$STACKFRAMES OFF}
    {$TYPEDADDRESS OFF}
    {$VARSTRINGCHECKS ON}
    {$WRITEABLECONST OFF}
    {$MINENUMSIZE 1}
    {$IMAGEBASE $400000}
    {$IMPLICITBUILD ON}
    
    requires
      rtl,
      vcl;
    
    contains
      AH_TOOL in 'AH_TOOL.PAS',
      ALIGRID in 'ALIGRID.PAS',
      ICONGRID in 'ICONGRID.PAS';
    
    end.
    

    und dann mit folgendem Kommandozeilenaufruf kompilieren:

    DCC32 -JL -LE"%BCD%\Bpl" -LU"%BCD%\Dcp" -NH"%BCD%\Hpp" -NB"%BCD%\Dcp"
    GR32_RUN_RSXE1.dpk StringAlignGrid.dpk
    

    Dabei nehme ich an, daß du die Umgebungsvariable BCD definiert hast, die auf $(BDSCOMMONDIR) verweist, unter Windows 7 für XE2 ist das %SystemDrive%\Users\Public\Documents\RAD Studio\9.0 :

    SET BCD=C:\Users\Public\Documents\RAD Studio\9.0
    

    Das Design-Package kannst du als C++Builder-Package anlegen; an den Delphi-Compiler mußt du, wie auch schon "designide", noch die Abhängigkeit von "StringAlignGrid" (deinem Laufzeitpackage) explizit mit -LU angeben.

    mr_crabs schrieb:

    Wenn ich nun das Projekt kompiliere escheint die Fehlermeldung:
    Datei cotrols.dcu nicht gefunden.

    Im Embarcadero Forum heist es man müsste nur "vcl.controls" davorschreiben.

    Entweder das, oder du trägst in den Projektoptionen unter "Namespace-Präfixe" die Präfixe "System;Winapi;Vcl" ein. Ggf. noch andere wie "Data", das findest du sicher selbst heraus.

    mr_crabs schrieb:

    Nachdem ich einige Einträge auf diese Weise umbennant habe, hänge ich nun an folgender Fehlermeldung:

    TShowHintEvent(TMethod(ShowHintProcs.Items[i]).methodpointer)(HintStr,CanShow,HintInfo);
    .
    .
    .
    [DCC Fehler]AH_TOOL.PAS:E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
    

    So wie ich das jetzt verstehen gibt es hier einen Konflikt zwischen dem Typ in der Deklaration und des Types in der Parameterübergabe.

    Richtig. Du kannst in allen Dateien des Projekts nach "AnsiString" suchen und alle Vorkommen durch "String" ersetzen, dann gehts.

    mr_crabs schrieb:

    Hab mir die Sache irgendwie einfacher vorgestellt 🙂

    Der Code ist eben alt und tut Dinge, die man nicht tun sollte.

    Beispielsweise greift er schreibend auf globale Konstanten zu, was in vielen Fehlermeldungen à la "Der linken Seite kann nichts zugewiesen werden" resultiert. Du kannst den Compiler dazu zwingen, solchen Blödsinn zu akzeptieren, indem du in AH_TOOL.PAS oben die Zeile

    {$WRITABLECONST ON}
    

    einfügst.

    Außerdem verwendet er NewStr() und DisposeStr(); die waren schon in Delphi 2 veraltet und unterstützen nur AnsiString. Du kannst die Compilerfehler beheben, indem du am Anfang des implementation-Abschnittes in ALIGRID.PAS und ALIGREDI.PAS das hier hinzufügst:

    { UnicodeString overloads of legacy functions }
    function NewStr (const S: UnicodeString): PUnicodeString;
    begin
      if S = '' then
        Result := NullStr
      else
      begin
        New (Result);
        Result^ := S;
      end;
    end;
    procedure DisposeStr (P: PUnicodeString);
    begin
      if (P <> nil) and (P^ <> '') then
        Dispose (P);
    end;
    

    Wenn ich das alles so mache, funktioniert es. Dennoch kann ich nur nochmal betonen, daß du gut daran tätest, auf ein Grid zu migrieren, das unter XE2 noch unterstützt wird.



  • Hallo audacia,

    danke für deine ausführlichen Antworten.
    Bin jedoch nicht weitergekommen, d.h. ich habe versucht mit dem Kommandozeilenaufruf das selbsterstellte .dpk-File zu compilieren.

    Dann erscheint folgende Meldung:

    "This version of the product does not support command line compiling"

    Somit werde ich wohl keine Möglichkeit haben, Delphi-Dateien zu übersetzen!?

    Habe versucht die Trial Version von Delphi XE2 nach zuinstallieren, jedoch sehe ich keinen Unterschied nach der Installation, d.h. es sieht so aus als wäre Delphi nicht intsalliert sondern nur C++ Builder XE2.

    Dann habe ich nach einer Ersatzkomponente gesucht.
    Bin durch die Foren auf das "KGrid" gestoßen, welche wohl ein gutes Pendant zu TStringAlignGrid ist.

    Die Dateien enthalten c++ Dateien, also bin ich folgt vorgegangen:

    -Neues Projekt erstellt als C++ Package.
    -Als Laufzeit Projekt eingestellt.
    -Dem Projekt folgende Datei hinzufügt: C++ Datei KGrid_CB2009.cpp
    -Projekt Compilieren ->Erfolg
    -Projekt Erzeugen ->Erfolg

    -Neues Projekt erstellt als C++ Package.
    -Als Entwurf Projekt eingestellt.
    -Dem Projekt folgende Datei hinzufügt: C++ Datei KGrid_CB2009.cpp
    -Unter Erfordert: .bpi Datei des Laufzeit Projektes hinzugefügt
    -Delphi Compiler Option:-Ludesign eingetragen
    -Projekt Compilieren ->Erfolg
    -Projekt Erzeugen ->Erfolg

    Anschließend habe ich das Package .bpl Datei unter "Packages installieren" eingefügt. Nun erscheint zwar der Pfad mit der .bpl Datei Datei, jedoch sind keine neuen Komponenten hinzugekommen und wenn ich auf den Knopf "Komponenten" drücke ist das Fenster leer.

    Mache ich etwas grundsätzlich falsch?



  • mr_crabs schrieb:

    "This version of the product does not support command line compiling"

    Ah, richtig, die bekannte Restriktion der Delphi-Demoversion. Hatte ich ganz vergessen. C++Builder beinhaltet den Delphi-Kommandozeilencompiler, aber die Demoversion tut das leider nicht.

    mr_crabs schrieb:

    Somit werde ich wohl keine Möglichkeit haben, Delphi-Dateien zu übersetzen!?

    Mit der Trial leider nur, wenn du sie in ein C++Builder-Package packst. Der Delphi-IDE-Compiler (dcc*.dll) ist verfügbar.

    mr_crabs schrieb:

    Dann habe ich nach einer Ersatzkomponente gesucht.
    Bin durch die Foren auf das "KGrid" gestoßen, welche wohl ein gutes Pendant zu TStringAlignGrid ist.

    Ja, das KGrid ist sicher ein guter Ersatz.

    mr_crabs schrieb:

    Mache ich etwas grundsätzlich falsch?

    Ja - nur diese .cpp-Datei hinzuzufügen bringt nichts. Guck doch einfach rein, dann sollte klar sein warum, wenn du mit dem Komponenten-Registrierungsmechanismus einigermaßen vertraut bist.

    Kurz zusammengefaßt: mit der Vollversion von C++Builder funktioniert meine obige Anleitung, und analog würde sie auch fürs KGrid funktionieren (dort allerdings ist die .dpk-Datei schon vorhanden, und du brauchst sie nicht erstellen). Mit der Trial-Edition wirst du beide Komponenten nicht zum Laufen bekommen. Es gibt zwar Workarounds, aber die sind etwas unschön, und wenn du auf den Erwerb der Vollversion warten kannst, dann tu dir (und mir) den Gefallen und gedulde dich lieber.



  • Hallo audacia,

    ich werde demnächst mir eine Vollversion zu Testzwecken zukommen lassen.
    Dann werde ich mal schauen, ob ich die Komponente einbinden kann, so wie es bei dir funktioniert hat.

    audacia schrieb:

    wenn du mit dem Komponenten-Registrierungsmechanismus einigermaßen vertraut bist.

    Nein, nicht wirklich.

    Ich habe eine Komponente aus dem Netz, die lies sich ganz einfach installieren,
    da musste ich kein Runtime oder Design Packet erstellen.
    Es war ein reines C++ Package und installierte sich eigentlich wie von selbst.
    Also muss ich in diesem Zusammenhang mich in das Thema mehr einlesen.



  • Hallo audacia,

    habe nun eine Vollversion zum Testen für ein paar Tage.

    Bin jetzt dabei das StringAlignGrid.dpk per Kommandozeilebaufruf zu compilieren:

    Habe die Umgebungsvariable BCD gesetzt, habe Win Xp Prof.

    SET BCD=C:\Dokumente und Einstellungen\All Users\Dokumente\RAD Studio\9.0

    Anschließend den Kommandozeilenaufruf wie von dir beschrieben ausgeführt und dies führt zu folgender Meldung:

    "Schwerwiegend: E2202 Package 'DCP' wir benötigt, konnte aber nicht gefunden werden"

    Fehlt mir noch eine Datei?
    Wo muss ich den das StringAlignGrid.dpk abspeichern?



  • mr_crabs schrieb:

    "Schwerwiegend: E2202 Package 'DCP' wir benötigt, konnte aber nicht gefunden werden"

    Ich habe mich hier vertippt:

    audacia schrieb:

    DCC32 -JL -LE"%BCD%\Bpl" -LU"%BCD%\Dcp" -NH"%BCD%\Hpp" -NB"%BCD%\Dcp"
    GR32_RUN_RSXE1.dpk StringAlignGrid.dpk
    

    Statt -LU"%BCD%\Dcp" mußt du -I"%BCD%\Dcp" und -U"%BCD%\Dcp" angeben, dann sollte es klappen.



  • Habe folgendes Kommando eingegeben:

    DCC32 -JL -LE"%BCD%\Bpl" -I"%BCD%\Dcp -U"%BCD%\Dcp -NH"%BCD%\Hpp" -NB"%BCD%\Dcp"
    GR32_RUN_RSXE1.dpk StringAlignGrid.dpk

    Dann erscheint folgende Fehlermeldung:

    Schwerwiegend: F1026 Datei nicht gefunden: 'GR32_RUN_RSXE1.dpk'

    Habe das gleiche auch mal mit GR32_RUN_RSEXE2.dpk versucht, führt zur selben Fehlermeldung.

    Grundsätzlich: Wo muss ich den die Datei StringALignGrid.dbk speichern?



  • Ich habe heute wohl meinen fahrlässigen Tag. Das "GR32_RUN_RSXE1.dpk" gehört zu Graphics32, wo ich den Kommandozeilenaufruf herkopiert hatte; laß es einfach weg. StringAlignGrid.dpk speicherst du z.B. in einem Unterverzeichnis des Projektverzeichnisses - wenn deine Quelltextdateien in \StringAlignGrid liegen, z.B. in \StringAlignGrid\packages\d16 . Allerdings mußt du dann auch die Source-Dateireferenzen anpassen, etwa so:

    // StringAlignGrid.dpk
    contains
      AH_TOOL in '..\..\AH_TOOL.PAS',
      ALIGRID in '..\..\ALIGRID.PAS',
      ICONGRID in '..\..\ICONGRID.PAS';
    

    Diesmal habe ich mich auch bequemt, meinen Ratschlag genau zu testen; bei mir funktioniert der Aufruf von

    DCC32 -JL -LE"%BCD%\Bpl" -I"%BCD%\Dcp" -U"%BCD%\Dcp" -NH"%BCD%\Hpp" -NB"%BCD%\Dcp" StringAlignGrid.dpk
    

    wie erwartet, wenn er in dem Verzeichnis erfolgt, wo die .dpk-Datei liegt.



  • hallo audacia,

    der kommandozeilenaufruf funktioniert bis zur nächsten Fehlermeldung:

    "Datei nicht gefunden: 'windows.dcu' "

    Da muss ich wahrscheinlich noch was in den Optionen ändern?

    Wird wahrscheinlich was mit den Gültigkeitsberteichnamen zusmmanhängen,
    jedoch habe ich nichts brauchbares im Netz gefunden, was mir hier weiterhilft.



  • mr_crabs schrieb:

    der kommandozeilenaufruf funktioniert bis zur nächsten Fehlermeldung:

    Wär ja auch zu einfach gewesen 🤡

    mr_crabs schrieb:

    "Datei nicht gefunden: 'windows.dcu' "

    Richtig, ab XE2 gibt es ja Scoped Unit Names, d.h. Windows.dcu heißt jetzt Winapi.Windows.dcu. Ich hab nur mit XE getestet, da gab es sowas noch nicht.

    Du kannst das Problem wahrscheinlich umgehen, wenn du zur DCC32-Kommandozeile noch den Parameter -NSSystem;Winapi;Vcl hinzufügst.



  • es geht stück für stück voran...

    Habe nun folgendes:

    Es wurden 4 Dateien erstellt im HPP Ordner:
    AH_TOOL.h
    ALIGRID.h
    ICONGRID.h
    StringAlignGrid.h

    Im DCP Ordner befindet sich eine StringGrid.bpi Datei

    Jedoch erscheint noch folgende Fehlermeldung:

    Datei nicht gefunden: 'StringAlignGrid.res'



  • mr_crabs schrieb:

    es geht stück für stück voran...

    Dann möchte ich dich ermutigen, Schritt für Schritt selbst weiterzugehen.

    Die zu einem Projekt gehörige .res-Datei generiert die IDE bei Bedarf selbst. Sie enthält das Anwendungs-Icon ("MAINICON"), die Versionsinfo sowie das Manifest. Du kannst eine solche .res-Datei am einfachsten bekommen, indem du einfach die .res-Datei eines anderen Projektes - idealerweise die von deinem Designtime-Package, das du sicher schon nach meiner Anleitung oben erstellt hast. Sagen wir, es heißt "StringAlignGridD.cbproj" - dann findest du eine StringAlignGridD.res im Projektverzeichnis, die du in den Projektordner von StringAlignGrid.dpk kopieren und entsprechend umbenennen kannst.

    Edit: Typographie



  • Ein herrlicher Werbethread für Embarcadero C++ Compiler Suites, irgendwie kamen mir die Probleme bekannt vor :D.
    Dein Detailwissen ist aber immer wieder beeindruckend, audacia.



  • DocShoe schrieb:

    Ein herrlicher Werbethread für Embarcadero C++ Compiler Suites, irgendwie kamen mir die Probleme bekannt vor 😃

    Das Package-System ist echt ein Problem. Das Konzept an sich finde ich gut, aber die Umsetzung, speziell in C++Builder, ist so extrem undurchdacht, daß man schreien möchte.


Anmelden zum Antworten