PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ / Klassenmethode speziell definieren



Kaiser-F
19.08.2008, 19:37
Hallo Leute,

ich arbeite mit Visual C++ 2005 mit der .NET-Klsassenbibliothek.

Ich habe mir ein kleines Serielles Protokoll gebastelt, welches dem
CAN-Protokoll sehr ähnlich ist, nur dass man mehr als 8 Datenbytes
senden kann.

Dieses habe ich nun auf meinem µC implementiert. Jetzt möchte ich es gerne auch in meinem PC-Bedienprogramm implementieren.

Dazu hätte ich gerne eine eigene Klasse.
Die Klasse soll das komplette Protokollmenagement beinhalten.

Die Kommunikation zur "Außenwelt" gehschieht mit folgenden
Methoden der Klasse:


void SSP::TIMER( void ); //Wird im 1kHz-takt ausgeführt. Alles was laufend erledigt werden muss, wird hier gemacht

void SSP::TX_MSG( unsigned int ID, unsignet int DLC, unsigned char data[] ); // Schreibt ein zu sendendes Paet in den Sendepuffer

void SSP::RX( unsigned chat data ); // Empganene Bytes werden sofort dieser Methde übergeben!

void SSP::TX( unsigned char data); // In dieser Methode steht die jewielige Sendefunktion des Systems

void SSP::DO( unsigned int ID, unsignet int DLC, unsigned char data[] ); // Empfangene Pakete werden hier ausgewertet


Nun zu meinem Problem:

Je nach Anwendung, müssen die Methoden
- void SSP::TX( unsigned char data);
- void SSP::DO( unsigned int ID, unsignet int DLC, unsigned char data[] );
entsprechend definiert werden.

Ich erstelle also mein Objekt mit:
SSP ssp();

Dann habe ich das Protokollmanagement als Objekt zur Verfügung.

Jetzt möchte ich die Methode ssp.TX mit der entsprechenden FUnktion
( in WIN .NET serialport ) ausstatten, damit die Methode bei Aufruf
die Datei versendet.

Das lässt der Compiler aber nich tmit sich machen...

Wie kann ich sowas geschickter lösten?


Woraus ich bei diesen speziellen Methoden hinaus will:
Erstellt man einen Button, dann kann man einen EventHeandler machen,
indem man auch beliebigen Code einfügen kann.
Ich hoffe ihr versteht was ich meine.

Und genau das will ich bei diesen speziellen Methoden auch erreichen.
Ich muss bei TX die Programmzeilen für das Senden des Bytes eingeben können,
und bei DO natürlich die Befehle, die bei der jeweiligen ID des mepgangenen
Pakes bestimmte Aktionen aufrufen.


Bestimmt ist die Lösung wieder soo einfach.. aber im Moment komme ich
leider nicht selbst drauf. Ich muss dazusagen, dass ich noch nicht so lange
C++ programmiere. Ich komme von der C-Welt.
Diese Sache würde ich jedoch sehr gerne ObjektOrientiert machen.

Ich hoffe jemand kann mir da mit ein paar Tipps weiterhelfen.

Kaiser-F
19.08.2008, 22:09
ANDERE FRAGESTELLUNG:

Ich habe jetzt eine Klasse SSPC, weilche alles managed.
Diese vererbe ich dann meiner Form1.

Jetzt hab ich noch ein Problem:

Die Methode void SSPC::TX( unsigned char data );
wird von der Klasse selbst aufgerufen.

Der Inhalt dieser Methode muss jedoch angepasst werden.
In Ihr soll eine Funktion SER_TX( unsigned char data ); stehen:

void SSPC::TX( unsigned char data ){
SER_TX( data );
}

SER_TX( data ) ist eine Methode von Form1.
Welche ich ja bei der Classe SSPC noch nicht einfügen kann...

Wie mach ich sowas am geschicktesten? Kann man eine
Funktion per "Call by reference" aufrufen?

Also quasi einen Zeiger(Element von SSPO) auf die Funktion
SER_TX( data ) werfen, und diese dann so ausführen?

Geht das? und Wie?

NumberFive
20.08.2008, 06:55
Ich hoffe das ich da halb wegs verstanden habe.

Klasse zu verschlatet ist mein lieblings sport *kotz*

Datei a.h

class a
{
void FunktionA(void);
void Init();
}

Datei a.cpp

a::Init()
{
b::Init(this)
}

Datei b.h
class a;

class B
{
void Init(a* pA);
}

Datei b.cpp
include "a.h"

void Init(a* pA);
{
pA->FunktionA();
}

ich hoffe du verstehts den Code.