Custom Component: TComponent mit T(Main)Menu* Link



  • Hi @ all!

    Ich bin gerade dabei, eine eigene Komponente, abgeleitet von TComponent zu schreiben. Dieser will ich zur Designtime einfach nur ein Menu zuordnen können.

    class PACKAGE TMenuSerializer : public TComponent
    {
    private:
    protected:
    	TMenu* m_Menu;
    public:
    	__fastcall TMenuSerializer(TComponent* Owner);
    
    __published:
    	__property Menus::TMenu* Menu = {read=m_Menu, write=m_Menu};
    };
    

    Hier bekomme ich jedoch einen Linker-Fehler:
    [ILINK32 Fehler] Error: Nicht auflösbares externes '__tpdsc__ Menus::TMenu' referenziert von BLABLA.OBJ

    Mit anderen Controls (TButton*, etc.) funktioniert es.
    Mit Zugriffsmethoden (SetMenu,..) kommt der selbe Fehler.
    Wenn TMainMenu genutzt wird (statt TMenu) ebenfalls.
    Wenn die Property nur public ist, funktioniert es (aber zeigt's natürlich net in der IDE an).

    Woran kann das liegen?

    (CodeGear C++Builder 2007 R2 V.11..)

    Danke schonmal, cPanther



  • Hallo

    Dein Codeausschnitt kompiliert auf meinem BCB5 fehlerfrei. Vielleicht solltest du mal das Menus:: in der Property weglassen, schließlich hast du es bei im Member auch weggelassen.

    bis bald
    akari



  • Ja, mit dem BCB6 geht das ebenfalls druch... aber leider nicht mit dem RAD Studio.

    Ob mit oder ohne namespace, der gleiche Fehler...

    __theoretisch__ wär's auch möglich, ne Basiskomponente zu schreiben,
    in der die property nur public ist.
    Eine zweite Komponente, abgeleitet von dieser könnte mit
    __published: __property Menu; die public Eigenschaft dann publishen.
    Aber ehrlich gesagt hab ich dazu doch recht wenig Motivation.
    Immerhin muss der Link-Fehler ja irgendeinen Grund haben...

    c ya, cPanther



  • So, nach einigen Tests:

    Wie oben geschrieben (ableiten von 'ner Art TCustomWTF) funktioniert es doch nicht...

    Mit anderen Controls bekomme ich jetzt ebenfalls diesen Fehler?!
    (__property TButton*, etc...)



  • ajcPanther schrieb:

    Hier bekomme ich jedoch einen Linker-Fehler:
    [ILINK32 Fehler] Error: Nicht auflösbares externes '__tpdsc__ Menus::TMenu' referenziert von BLABLA.OBJ

    Füge vcl.bpi und ggf. vclx.bpi zu den "Requires" hinzu.



  • Mit komplettem Pfad geht es nicht, aber nur der Dateiname... Funktioniert! 👍

    Danke! 🙂


Anmelden zum Antworten