Eigene Aggregat-Komponente (TPanel mit TJvDBUltimGrid) erzeugt Linker-Fehler



  • Hallo,

    Ich versuche grad eine Aggregationskomponente zu schreiben und scheitere schon an den ersten Zeilen:

    Header

    //---------------------------------------------------------------------------
    
    #ifndef AggGridH
    #define AggGridH
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <ExtCtrls.hpp>
    #include <JvDBUltimGrid.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TAggGrid : public TCustomPanel
    {
    private:
    	TJvDBUltimGrid* m_Grid;
    
    protected:
    	void __fastcall CreateWindowHandle(TCreateParams* params_);
    
    public:
    	__fastcall TAggGrid(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    

    Impl

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    
    #pragma hdrstop
    
    #include "AggGrid.h"
    #pragma package(smart_init)
    //#pragma link "JvDBUltimGrid"  // wird nicht gefunden
    //---------------------------------------------------------------------------
    // ValidCtrCheck wird benutzt um sicher zu stellen, dass die kreierten 
    // Komponenten keine pur virtuelle Funktionen enthalten.
    //
    
    static inline void ValidCtrCheck(TAggGrid *)
    {
    	new TAggGrid(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TAggGrid::TAggGrid(TComponent* Owner)
    	: TCustomPanel(Owner)
    {
    // Create all the stuff here
    m_Grid = new TJvDBUltimGrid(this);
    }
    //---------------------------------------------------------------------------
    void __fastcall TAggGrid::CreateWindowHandle(TCreateParams* params_)
    {}
    //---------------------------------------------------------------------------
    namespace Agggrid
    {
    	void __fastcall PACKAGE Register()
    	{
    		TComponentClass classes[1] = {__classid(TAggGrid)};
    		RegisterComponents("Sample Components", classes, 0);
    	}
    }
    //----------------------------------------------------------------------
    

    Link Fehler ist klar, er kann den JvUltimGrid Konstruktor nicht auflösen.
    Setze ich das #pragma link "JvDBUltimGrid" wieder rein, findet er die Datei nicht?!

    Komisch ist, das eine normale Formularanwendung mit dem Grid anstandslos funktioniert. (Selbes pragma, gleiche Pfade, etc.)
    Interessanterweise existiert aber keine JvUltimGrid.obj Datei, nur eine dcu,
    was wird denn hier über pragma gelinkt?

    c a, cPanther



  • Wenn du ein Package erstellst, solltest du das Package, das TJvDBUltimGrid enthält, in die Requires-Liste aufnehmen.



  • Is schon (hier: JvDBD11d.bpi)
    Das ist ja das merkwürdige... hm, könnte es sein, das noch andere Packages benötigt werden?



  • ajcPanther schrieb:

    Is schon (hier: JvDBD11d.bpi)

    Die vielen Ds klingen nach "Designtime". Kann es sein, daß es davon auch eine Runtime-Variante gibt? Falls ja, nimm die statt der Designtime-Variante.



  • Ja, das isses danke! 🙂

    Hatte das Packag mit ...R zwar schon gesehen aber irgendwie gedacht... wayne?! 😃

    Dankeschön

    c ya, cPanther


Anmelden zum Antworten