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.bpkThread1 = 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?