Globale Variablen mit Windows Forms

Killler07

Grünschnabel

Hallo,

ich programmiere nun seit einiger Zeit mit Visual C++ 2008 Express.
Und zwar Windows-Forms Anwendungen.

Momentan arbeite ich mich in Socketprogrammierung ein. Jedoch behindert mich wieder ein Problem, dass ich auch früher schon hatte.

Wenn ich nun eine Funktion schreibe, die beim Drücken eines Buttons einen Socket erstellt, funktioniert das wunderbar:

C++:
private: System::Void sock_button_Click(System::Object^  sender, System::EventArgs^  e) {

			 SOCKET s;

			 s = socket(AF_INET,SOCK_STREAM,0);
			 if(s==INVALID_SOCKET) {
				 this->sock_label->Text = "Fehler";
			 }
			 else {
				 this->sock_label->Text = "OK";
			 }

		 }

Nun möchte ich allerdings mit einem anderen Button den Socket öffnen:

C++:
private: System::Void con_button_Click(System::Object^  sender, System::EventArgs^  e) {
/* Gekürzt */

rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));

/* Gekürzt */

}
Verständlicherweise motzt der Compiler jetzt dass "s" ja noch gar nicht definiert ist. Wie schaffe ich es, dass er eben auf das "s" zugreift, dass ich oben erstellt habe. Schliesslich möchte ich ja genau den Socket verbinden, den ich auch oben erstellt habe..

Ich habe es mal versucht ganz oben ein
C++:
extern SOCKET s;
einzufügen. Dies wurde jedoch sogleich von einigen Linkerfehlern zunichtegemacht.

Wie muss ich das machen?

Schon einmal Vielen Dank für jede Hilfe :)

Grüsse, Killer07
 
Zuletzt bearbeitet:
So, wie die Frage gestellt ist, würde ich ein beliebiges Grundlagenbuch über C++ empfehlen (egal für welchen Compiler oder welche IDE).

Ansonsten: Einfach das Socket-Objekt in den Header als private oder protected mit einbinden und dann im Konstruktor instanziieren. Nicht vergessen, es im Destruktor wieder freizugeben.
 
Zurück