Object Pointer an Thread Object übergeben, kann nicht auf Memberfuntionen zugreifen



  • Hallo,

    ich übergebe dem Konstruktor eines Thread Objects(class communication) einen Pointer eines Objects der Klasse Com (Com1), Com ist eine von mir entwickelte
    Komponenete in my_komps.bpk

    Thread1 = new communication(false,Com1);
    

    Im Thread

    //Im Header
    class Com;        //Forward reference
    class communication : public TThread
    {
    private:
         Com *com;             //Com Pointer Instanz erzeugen
     protected:
    	void __fastcall Execute();
    
    public:
    	__fastcall communication(bool CreateSuspended,Com *comm);
    	__fastcall ~communication();
    };
    //Konstruktor
    __fastcall communication::communication(bool CreateSuspended,Com *comm)
    	: TThread(CreateSuspended)
    {
         Priority = tpNormal;
         FreeOnTerminate = true;		
         com = comm;              //Pointer zuweisen
    }
    

    Möchte ich nun im Thread auf eine MemberFunktion der Klasse Com zugreifen,

    if (!com->get_high_low((unsigned __int16*)&fmain_window->ControllerInfo.SW))
         	{
        			return 0;
        		}
    

    Kommt die Fehlermeldung "GetHighLow ist kein Element von Com, weil der Typ nicht
    definiert ist.
    Selbst nach includieren des Headers der Klasse Com kommt die Fehlermeldung.



  • In der Cpp der Threadklasse auf jeden Fall.



  • Hallo

    selbstverständlich must du wenn du eine Klasse benutzten willst, deren Header includen, selbst mit Forward Declaration. In deinem Fall sogar in Header des Threads.

    bis bald
    akari



  • Vieleicht habe ich da etwas nicht kappiert.

    Meine Komponente Com taucht in der Komponenten Leiste auf, die Komponente
    befindet sich in der Package my_comps.bpk, die sich in einem Order MyComps befindet.

    Ich kann ja auch auf alle Membervariablen/Funktionen eines Image zugreifen
    weil automatisch der Header vcl.h includiert wird.

    Es ist sehr umständlich in jedem Project ersteinmal den Com Header
    in der Ordner zu kopieren um ihn dann includen zu können.

    Davon abgesehen kann ich in der Form auf dem ich die Komponenete Com gesetzt
    habe ja auch auf alle Membervariablen/Funktionen von Com zugreifen hier ist
    im Header Com.h inkludiert und in der Cpp gibt es noch das Pragma #pragma link "Com".



  • Hallo

    ist aber so, und das soll verhindern das für jede Unit (Übersetungseinheit) dein kompletter Quellecode jedesmal kompiliert werden muß.
    In der VCL.H stehen auch alle benötigten Header, so das du auf viele VCL-Klassen und Funktionen zugreifen kannst. Aber wenn du dir mal den Header eines Forms anschaust, in dem viele eher ungewöhnliche Komponenten vorhanden sind (wie die BDE-Kompos), stellst du fest das dort auch neue Header zu der VCL.H dazu kommen.

    bis bald
    akari



  • Ich habe mir mal den vcl.h angesehen, hier wird vcl0.h includiert in dem
    dann mehrere Header includiert werden.

    Wenn ich eine neue Komponenete unter Borland erstelle, bin ich davon
    ausgegangen das der Header dieser Komponente die ja auch in der Komponenten Leiste
    auftaucht in vcl.h eigetragen wird.



  • ausserdem brauchst du die kompos nicht jedesmal in ein neues projekt zu kopieren. kannst doch ueber relative pfadangaben auf die entspr. header zu greifen.



  • Habe nun die an einem anderem Rechner erstellte Package MyKomps.bpk
    mit den Komponenten nach Hause gemailt.
    Nun versuche ich gerade die Package unter Komponenten->Packages Installieren
    hinzuzufügen.
    Hier ist die extension aber bpl meine Package hat aber .bpk.
    Wie bekommt man das den nun hin?


Anmelden zum Antworten