000
18.10.2006, 13:03 Uhr
www.pat
|
Hi!
Ich versuche gerade Werte aus meiner Klasse "ComPort" an Form1 zu übergeben. Da ich mit Threats und Timeouts zu kämpfen habe will ich eine Variable haben, auf die meine komplette Klasse zugreifen kann (char MyData[1024]). Leider werden die Werte in diesem Array "MyData[1024]" anscheinend zurrückgesetzt wenn eine Funktion wieder "geschlossen" wird (sry, ka wie ich das nennen soll...)
mein Header
C++: |
#include <windows.h>
class ComPort { public: char MyData[1024]; //<- die Werte sollten immer erhalten bleiben public: HANDLE Open(const char*); public: int Einstellungen(HANDLE,int,int); public: void Timeouts(HANDLE,int,int); public: void Write(HANDLE,char*,int); public: int Read(HANDLE,char*,int); public: bool Close(HANDLE); public: char GetData(int); public : long StartScanner (void); static DWORD WINAPI GetIDs (LPVOID lpArg); DWORD GetIDs (void); HANDLE m_hThread; };
|
in Form1 passiert folgendes:
C++: |
void Form1::Irgentwann vorher() { // bevor der Timer gestartet wird // wird Write() aus ComPort aufgerufen: // MyData[5 und 6] werden gesetzt, verschwinden aber wieder // wenn diese Funktion endet.
ComPort Port; Port.Write( ... ); this->timer1->Enabled = true; //... }
void Form1::timer1_Tick(System::Object * sender, System::EventArgs * e) { // Test ob der Timer läuft // StartScanner aus ComPort wird // aufgerufen: MyData[2 und 3] wird gesetzt
char GotData[1024]; this->listView1->Items->Add("Tick", 3); ComPort Port; Port.StartScanner();
// hier hole ich einen char nach dem anderen. // die Quelle ist "MyData[1024]" aus ComPort
GotData[0]=Port.GetData(0); GotData[1]=Port.GetData(1); GotData[2]=Port.GetData(2); GotData[3]=Port.GetData(3); GotData[4]=Port.GetData(4); GotData[5]=Port.GetData(5); // in ListView wird dann GotData angezeigt
this->listView1->Items->Add(GotData, 3); }
|
meine ComPort.cpp sieht folgendermaßen aus:
C++: |
void ComPort::Write(HANDLE HandlePortW,char* Data,int sizew) { MyData[4]=0x35; //diese beiden chars verschwinden :cry: MyData[5]=0x36; //.... }
char ComPort::GetData(int x) { MyData[0]=0x31; // diese werden problemlos übergeben MyData[1]=0x32;
return MyData[x]; }
bool ComPort::Close(HANDLE HandlePortC) { if (CloseHandle(HandlePortC)==0) return false; else {return true;}; }
long ComPort::StartScanner (void) { MyData[2]=0x33; // diese beiden werden auch übergeben MyData[3]=0x34;
//... }
|
Zussammenfassung:
MyData[0]=0x31; // in GetData(): wird übergeben MyData[1]=0x32; MyData[2]=0x33; //in StartScanner: wird übergeben MyData[3]=0x34; MyData[4]=0x35; // in write(): diese Werte gelten nicht mehr MyData[5]=0x36; // bei der Übergabe
ich bekomme am Ende also den String: "1234" ich erwarte aber "123456" Wo ist die 5 und die 6 geblieben???
Vielen Dank!
pAT Dieser Post wurde am 18.10.2006 um 13:09 Uhr von www.pat editiert. |