"Eigenschaft existiert nicht"



  • habs probiert mit dem "win", groß und klein geschrieben. der compiler kann damit nichts anfangen.

    [C++ Fehler] ProgressBarExt.h(124): E2303 Typname erwartet
    [C++ Fehler] ProgressBarExt.h(124): E2139 In Deklaration fehlt ;
    

    lasse ich die eigenschaft im objektinspektor auf "true", starte, und setze es dann zur laufzeit auf "false" funktioniert es.



  • Es ging NICHT um Gross/ Klein- Schreibung!

    Gruss
    Frank



  • Vielleicht habe ich mich falsch ausgedrückt. Ich habe es mit dem "win" vor der Funktionsdeklaration probiert, und dem void, leider kannte der Compiler das nicht.
    Muss ich einen bestimmten Header includieren? "win" sagt mir erstmal so nichts, weshalb ich immer noch ratlos bin.
    Für die paar kleinen Progrämmchen in der Freizeit möchte ich ungerne das neue RAD-Studio für viel Geld kaufen, in der Hoffnung das es dort anders ist. Mir ist klar, das BCB6 alt ist, aber ich möchte gerne auch auf Windows 7 entwickeln, was momentan nicht sorecht aus den genannten Gründen klappen will. Aus einer Ahnung heraus habe ich XP und 7 laufen, weil ich vermutet hatte, dass es Komplikationen geben wird. Aber bislang lief alles, bis ich mich entschlossen habe, zum ersten mal eine eigene Komponente zu programmieren, die dann auch noch Windows 7 up to date ist. Wenn man das ganze nur zur Entwurftszeit unter XP zum laufen bekommt, wäre das schade.

    Gruß



  • das "win" sollte ein "ein" sein und hat im Quellcode nix zu suchen, DerAltenburger hatte sich halt nur vertippt, die eigentliche Änderung betraf nur das "void" in der Klammer



  • Oh, hab ich nicht gerafft^^...Es funktioniert trotzdem nicht.

    Gruß



  • "Funktioniert nicht" ist keine ausreichende Problembeschreibung.



  • Also ich stelle im Objektinspektor die Eigenschaft auf "false" (im Konstrktor der Komponente ist die "true", in der __property-Deklaration auch "default=true"), dann kommt bei Start der Anwendung die EAccessViolation. Die IDE springt dann automatisch in die Datei "Forms.hpp" in die Zeile:

    /* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponent* AOwner) : TCustomForm(AOwner) { }
    

    .

    Wenn ich gleiches unter Windows XP mache, funktioniert es.

    Wenn ich unter 7 aber im Objektinspektor, die Eigenschaft auf "true" setze, geht es.



  • DerAltenburger schrieb:

    Wenn Du im Konstruktor Werte setzt, die nicht standard sind, muss in der Property DERSELBE Wert als default stehen!!!

    Das ist zwar richtig, aber vermutlich nicht Ursache des Fehlers.

    DerAltenburger schrieb:

    Mach mal anstelle
    bool __fastcall GetWinTheming();
    win
    bool __fastcall GetWinTheming(void);

    rein.

    Das wiederum ist völlig sinnfrei - die beiden Deklarationen sind äquivalent.

    Zur Lösung des Problemes solltest du den Debugger benutzen. Es gibt genau zwei Stellen in der VCL, an denen diese Exception geworfen werden kann, und beide sind in Classes.pas in der Funktion TReader.ReadProperty():

    procedure TReader.ReadProperty(AInstance: TPersistent);
      ...
    begin
      try
        PropPath := ReadStr;
        try
          ...
          while True do
          begin
            ...
            PropInfo := GetPropInfo(Instance.ClassInfo, FPropName);
            if PropInfo = nil then
              PropertyError(FPropName); // <--
            ...
          end;
          PropInfo := GetPropInfo(Instance.ClassInfo, FPropName);
          if PropInfo <> nil then ReadPropValue(Instance, PropInfo) else
          begin
            ...
            if FPropName <> '' then
              PropertyError(FPropName); // <--
          end;
        ...
      ...
    end;
    

    Erstelle deine Anwendung mit Debug-Bibliotheken und ohne Packages, dann kannst du im VCL-Quelltext Breakpoints setzen.



  • Das ist ds nächste Problem, was ich habe. Ich kann diese Stellen nicht debuggen, es fehlen die "blauen Kuller". Überall kann ich debuggen, nur nicht an den wichtigen Stellen. Man kann teilweise Debugpunkte auf white spaces setzen oder auf Kommentare. Er "bricht" dort dann auch^^. Aber nicht da wo ich es muss.
    Hab im Netz geforscht und daraufhin sämtliche CR/LF überprüft. Es sind alle korrekt da wo sie sein sollen.

    Edit: Achso ja, und die Classes.pas kann ich eh nicht debuggen, weil der BCB6 personal keine Sources mitliefert.



  • Hab was rausgefunden! Wenn ich ein neues Testprojekt mache und meine Komponente draufpacke funktioniert es!
    Ich habe im alten Testprojekt die Komponente von der Form gelöscht, alle binären durch den Compiler erzeugten Dateien, also alles ausser dfm, .cpp und .h, gelöscht, alles was die Komponente betrifft auskommentiert und einen Rebuild des Projektes gemacht. Danach habe ich die Komponente wieder draufgepackt, Kommentare wieder rausgenommen, und rebuildet. Dann funktioniert es wieder nicht! In der dfm war nach dem Löschen der Komponente nichts über geblieben.

    Das ist soweit kein Problem, denn die Komponente funktioniert ja jetzt. Allerdings habe ich sie schon in ein anderes Projekt, an dem ich seit mehreren Monaten arbeite, integriert. Wenn ich sie da lösche und neu drauf tue das gleiche Problem. Ich kann jetzt ja nicht das ganze Projekt neu machen.

    Bekomme ich das irgendwie in den Griff?

    Liebe Grüße



  • Hab jetzt das ganze Prozedere unter XP gemacht, und das Projekt funktioniert jetzt auch unter 7...Also irgendwie hat BCB6 ein Problem unter Windows 7.

    Ist also gelöst, wenn auch unschön.

    MfG


Anmelden zum Antworten