M
Matthias_Nordwig
Hallo,
ich programmiere zur Zeit einen Chat für die Arbeit. Da sich dort nicht die Möglichkeit eines Servers bietet, muss ich den Austausch der Verbindungsadressen über Textdateien über ein Netzlaufwerk regeln. Entsprechend umständlich sind de Chatroutinen.
Dazu möchte ich mehrere Objektinstanzen des TClientSocket erstellen, was auch schon ganz gut klappt. Nur wird der Speicher entweder überschrieben auf dem ich Sie erzeuge, oder es gibt eine Zugriffsverletzung bei der Ausführung bestimmter Aktionen, wenn erstere bereits aktiv sind.
Hier der relevante Code:
Das ist der Zeiger den ich im Header definiert habe:
Diese Prozedur soll das Objekt erstellen:
Wenn ich folgendes aufrufe oder ein neues Objekt anderer Art mit eigenem Adresscounter erstelle, dann wird auf den Speicher des TClientObjekts zugegriffen.
Bisher habe ich dafür nur die Erklärung, das eventuell der Speicher nach dem Beenden der Erstellungsfunktion des Objektes wieder frei gegeben wird.
Also stellt sich für mich die Frage, wie ich den Speicher global reservieren kann. (Wichtig dabei ist mir allerdings, das die Anzahl der Sockets dynamisch bleibt)
Natürlich würden mich auch elegantere Lösungsvorschläge interessieren, da ich hier sehr C-lastig programmiere wie ich weiss.
Mit vielen Dank im Vorraus,
und freundlichen Grüßen
Matthias Nordwig
ich programmiere zur Zeit einen Chat für die Arbeit. Da sich dort nicht die Möglichkeit eines Servers bietet, muss ich den Austausch der Verbindungsadressen über Textdateien über ein Netzlaufwerk regeln. Entsprechend umständlich sind de Chatroutinen.
Dazu möchte ich mehrere Objektinstanzen des TClientSocket erstellen, was auch schon ganz gut klappt. Nur wird der Speicher entweder überschrieben auf dem ich Sie erzeuge, oder es gibt eine Zugriffsverletzung bei der Ausführung bestimmter Aktionen, wenn erstere bereits aktiv sind.
Hier der relevante Code:
Das ist der Zeiger den ich im Header definiert habe:
Code:
TClientSocket *client;
Diese Prozedur soll das Objekt erstellen:
Code:
void __fastcall Tchat::create_client(String add_ip,String add_port)
{
*(&client+client_counter) = new TClientSocket(Application);
(*(&client+client_counter))->Port=StrToInt(add_port);
(*(&client+client_counter))->Host=add_ip;
(*(&client+client_counter))->Active=true;
(*(&client+client_counter))->OnConnect=OnConnect;
(*(&client+client_counter))->OnDisconnect=OnDisconnect;
client_counter++;
}
Wenn ich folgendes aufrufe oder ein neues Objekt anderer Art mit eigenem Adresscounter erstelle, dann wird auf den Speicher des TClientObjekts zugegriffen.
Code:
anmeldung->Hide();
chat->Show();
Bisher habe ich dafür nur die Erklärung, das eventuell der Speicher nach dem Beenden der Erstellungsfunktion des Objektes wieder frei gegeben wird.
Also stellt sich für mich die Frage, wie ich den Speicher global reservieren kann. (Wichtig dabei ist mir allerdings, das die Anzahl der Sockets dynamisch bleibt)
Natürlich würden mich auch elegantere Lösungsvorschläge interessieren, da ich hier sehr C-lastig programmiere wie ich weiss.
Mit vielen Dank im Vorraus,
und freundlichen Grüßen
Matthias Nordwig