?
Scheint mir auch ein Design fehler zu sein, wobei das ganze nicht so einfach ist. Ich könnte der Basisklasse auch einfach einen Default-Konstruktor geben und die benötigte Klasse meiner Hauptfunktion übergeben. Das sähe dann so aus:
void WINAPI EineFunktion(class xKlasse *XK)
{
Basisklasse BKlasse;
BKlasse.Main(XK->BenoetigteKlasse);
}
Klassen wie xKlasse befinden sich in einem SDK (Software Development Kit), sodass sich diese nicht ohne Weiteres ändern lassen. Außerdem ist das Projekt eine DLL, die dann über einen Hook in die entsprechende Applikation injiziert wird. Gehookt wird eine Funktion, die die gewünschte Klasse (xKlasse) als Paramter besitzt, sodass man damit arbeiten (bsp. über Unterklassen) kann.
Die benötigte Klasse würde ich dann in der Main-Funktion den erbenden Klassen zugänglich machen, wobei ich dann nicht kontrollieren könnte, ob sie noch aktuell ist, was ich ja automatisch mache, wenn ich jedesmal ein neues Objekt der Basisklasse erstelle, wenn etwas in EineFunktion (Funtkion des Hooks) passiert. Ich könnte dann natürlich die benötigte Klasse immer wieder den entsprechenden Funktionen als Parameter übergeben, aber das ist - soweit ich das verstanden habe - nicht wirklich Sinn der objektorientenden Programmierung. Was mir zum Schluss hin noch einfällt ist, dass ich sowieso immer ein neues Objekt der erbenden Klasse in der Main-Funktion erstelle und ich die benötigte Klasse darüber einfach übergeben und dann im Dekonstruktor wieder NULL setze kann. Das würde dann so aussehen:
void WINAPI EineFunktion(class xKlasse *XK)
{
Basisklasse BKlasse;
BKlasse.Main(XK->BenoetigteKlasse); //BenoetigteKlasse vom Typ aKlasse
}
void Basisklasse::Main (aKlasse *BenoetigteKlasse)
{
if (BenoetigteKlasse != NULL)
{
ErbendeKlasse EK(BenoetigteKlasse);
EK.MachWas();
}
}
Falls irgendwer eine Idee hat, wie man das ganze verbessern könnte, dann immer her damit.