Fehler bei Packageinstallation
-
Hallo erst mal,
ich hab mir ein Testprogramm geschrieben, bei dem ich in einer Komponente einen Thread erstelle, der mir Komponentenereignisse auslöst. Das funktioniert auch alles, aber wenn ich die Komponente installiert habe und das Programm einmal ausgeführt hab kommt bei einem nochmaligen Registrieren die Fehlermeldung
" Die Anweisung in "0x40035f2b" verweist auf Speicher in "0x05ad31ec". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.
Diese Meldung kommt sowohl in der 6er Version als auch in der 5er Version des Builders.
Kann mir da jemand weiterhelfen. Irgendwie klingt das, als ob vielleicht der Thread nicht richtig beendet wird, aber ich hab keine Ahnung was ich da tun kann.
Ich hänge einfach mal den Code an, Danke schon malHeader Datei
#ifndef ccH #define ccH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> //--------------------------------------------------------------------------- class ctest; class PACKAGE cc : public TComponent { private: double a; ctest *my; TNotifyEvent fAct; protected: public: __fastcall cc(TComponent* Owner); void __fastcall SetA(int b); int __fastcall GetA(void); void __fastcall stop(void); __published: __property TNotifyEvent ACT={read=fAct,write=fAct}; }; //--------------------------------------------------------------------------- class ctest : public TThread { private: cc *parent; double c; void __fastcall out(void); protected: void __fastcall Execute(); public: __fastcall ctest(bool CreateSuspended,cc *owner); }; //--------------------------------------------------------------------------- #endif
CPP Datei
//--------------------------------------------------------------------------- #include <vcl.h> //#include <basepch.h> #pragma hdrstop #include "cc.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten // keine rein virtuellen Funktionen besitzen. // static inline void ValidCtrCheck(cc *) { new cc(NULL); } //--------------------------------------------------------------------------- __fastcall cc::cc(TComponent* Owner) : TComponent(Owner) { my =new ctest(false,this); } //--------------------------------------------------------------------------- namespace Cc { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(cc)}; RegisterComponents("Beispiele", classes, 0); } } //--------------------------------------------------------------------------- void __fastcall cc::SetA(int b) {a=b;} int __fastcall cc::GetA(void) { return a;} void __fastcall cc::stop(void) { my->Terminate(); } //--------------------------------------------------------------------------- // Wichtig: Methoden und Eigenschaften von Objekten der VCL können nur // in Methoden verwendet werden, die Synchronize aufrufen, z.B.: // // Synchronize(UpdateCaption); // // wobei UpdateCaption so aussehen könnte: // // void __fastcall ctest::UpdateCaption() // { // Form1->Caption = "In Thread aktualisiert"; // } //--------------------------------------------------------------------------- __fastcall ctest::ctest(bool CreateSuspended,cc *owner) : TThread(CreateSuspended) { parent = owner; c=0; } //--------------------------------------------------------------------------- void __fastcall ctest::Execute() { //---- Hier den Thread-Code plazieren---- while(!Terminated) { for(int i=0;i<=10000000;i++); c++; Synchronize(out); } } //--------------------------------------------------------------------------- void __fastcall ctest::out(void) { parent->SetA(c); if(parent->ACT) parent->ACT(this); }
[ Dieser Beitrag wurde am 11.02.2003 um 08:21 Uhr von Jansen editiert. ]
-
Niemand der weiterhelfen kann oder das gleiche Problem hat????