Eine Instanz ist ein Objekt, welches du von einer bestimmten Klasse angelegt hast.
Eine Beispielklasse in der .h - Datei:
Der Konstruktor der Klasse CBeispiel:
in der CPP legst du dann so ein Objekt davon an:
Damit ist "bla" eine Instanz der Klasse CBeispiel. Der Aufruf hat auch gleich den Konstruktor von CBeispiel aufgerufen, welcher die Zeile "Hier ist der Konstruktor" auf der Konsole ausspucken würde.
Indem du jetzt "bla" in Gedanken durch die Instanz deines Hauptfensters (Unit1 bzw. "Hauptinstanz") ersetzt und selbige nicht in der main() lokal sondern projektglobal anlegst, kannst du durch das extern Unit1 Hauptinstanz; von Unit2 aus auf die Instanz des Hauptfensters zugreifen.
Du musst dir das ganze Konstrukt modulbasiert vorstellen. Unit1 ist ein Modul und Unit2 ist ein Modul. Beide haben von Standard her keinen Bezug zueinander. Den muss man erst herstellen. Normal übernimmt das der BCB, wenn du ein neues Unterformular zum Projekt hinzufügst. Du kannst also damit dann auf Knopfdruck ein neues Fenster öffnen. Aber damit du von diesem Fenster auch auf das übergeordnete Fenster zugreifen kannst, musst du einen solchen Bezug auch in der anderen Richtung herstellen. Und das tust du mit diesem extern... Konstrukt. Du sagst deiner Unit2 also, daß irgendwo in deinem Projekt noch ein Objekt mit dem Namen "Hauptinstanz" existiert. Irgendwo. Deinem Kompiler ist das erstmal furz egal, wo die ist. Der muss nur wissen, daß sie existiert. Den Rest, also herausfinden, wo dieses Objekt existiert und die Verbindung zwischen den beiden Einheiten stellt dann der sogenannte Linker her. Wichtig ist nur, daß das eigentliche Objekt und der über extern... festgelegte Objekt-Bezug den gleichen Namen besitzen. Sonst weiß der Linker nicht, wie er die beiden Variablen zuordnen soll. Er würde dann meckern, daß eine externe Verbindung nicht aufgelöst wurde.
Ist schon nicht einfach das ganze. Aller Anfang ist schwer. Du wirst es schon verstehen irgendwann. Da kommt schon noch der "Aha"-Effekt. Alles nur 'ne Frage der Zeit und der Geduld.
Eine Beispielklasse in der .h - Datei:
Code:
class CBeispiel
{
public:
CBeispiel(); // Konstruktor, wird aufgerufen, wenn du ein Objekt dieser Klasse anlegst
~CBeispiel(); // Destruktor, wird aufgerufen, wenn du das Objekt wieder zerstörst
};
Der Konstruktor der Klasse CBeispiel:
Code:
CBeispiel::CBeispiel()
{
printf("Hier ist der Konstruktor\n");
}
in der CPP legst du dann so ein Objekt davon an:
Code:
main()
{
CBeispiel bla;
}
Damit ist "bla" eine Instanz der Klasse CBeispiel. Der Aufruf hat auch gleich den Konstruktor von CBeispiel aufgerufen, welcher die Zeile "Hier ist der Konstruktor" auf der Konsole ausspucken würde.
Indem du jetzt "bla" in Gedanken durch die Instanz deines Hauptfensters (Unit1 bzw. "Hauptinstanz") ersetzt und selbige nicht in der main() lokal sondern projektglobal anlegst, kannst du durch das extern Unit1 Hauptinstanz; von Unit2 aus auf die Instanz des Hauptfensters zugreifen.
Du musst dir das ganze Konstrukt modulbasiert vorstellen. Unit1 ist ein Modul und Unit2 ist ein Modul. Beide haben von Standard her keinen Bezug zueinander. Den muss man erst herstellen. Normal übernimmt das der BCB, wenn du ein neues Unterformular zum Projekt hinzufügst. Du kannst also damit dann auf Knopfdruck ein neues Fenster öffnen. Aber damit du von diesem Fenster auch auf das übergeordnete Fenster zugreifen kannst, musst du einen solchen Bezug auch in der anderen Richtung herstellen. Und das tust du mit diesem extern... Konstrukt. Du sagst deiner Unit2 also, daß irgendwo in deinem Projekt noch ein Objekt mit dem Namen "Hauptinstanz" existiert. Irgendwo. Deinem Kompiler ist das erstmal furz egal, wo die ist. Der muss nur wissen, daß sie existiert. Den Rest, also herausfinden, wo dieses Objekt existiert und die Verbindung zwischen den beiden Einheiten stellt dann der sogenannte Linker her. Wichtig ist nur, daß das eigentliche Objekt und der über extern... festgelegte Objekt-Bezug den gleichen Namen besitzen. Sonst weiß der Linker nicht, wie er die beiden Variablen zuordnen soll. Er würde dann meckern, daß eine externe Verbindung nicht aufgelöst wurde.
Ist schon nicht einfach das ganze. Aller Anfang ist schwer. Du wirst es schon verstehen irgendwann. Da kommt schon noch der "Aha"-Effekt. Alles nur 'ne Frage der Zeit und der Geduld.