Socket->BeginConnect Probleme mit AsyncCallback-Delegaten
-
Ich habe folgenden Code:
public ref class Form1 : public System::Windows::Forms::Form { //usw. private: void btnOK_MouseUp(Object^ sender, MouseEventArgs^ e) { try { clientSocket = gcnew Socket(AddressFamily::InterNetwork, SocketType::Stream, ProtocolType::Tcp); IPAddress^ pAddress = IPAddress::Parse(txtServerIP->Text); IPEndPoint^ pEndPoint = gcnew IPEndPoint(pAddress, 1000); AsyncCallback^ pCallback = gcnew AsyncCallback(&Form1::OnConnect); clientSocket->BeginConnect(pEndPoint, pCallback, nullptr); }//endtry catch (Exception^ e) { txtFault->Text = e->Message; }//endcatch } private: void OnConnect(IAsyncResult^ ar) { //tu was } };
Wenn ich das Ganze nun kompiliere erhalte ich die Fehlermeldung:
error C3352: void Form1::OnConnect(System::IAsyncResult ^)": Die angegebene Funktion stimmt nicht mit dem Delegattyp "void (System::IAsyncResult ^)" überein.
Laut Hilfe lautet die Definition für AsyncCallback:
public delegate void AsyncCallback (IAsyncResult^ ar)
und in einem Beispiel in der Hilfe steh auch folgendes:
s->BeginConnect( lep, gcnew AsyncCallback(&Async_Send_Receive::Connect_Callback ), s );
Ich verstehe jetzt nicht was in meinem Code laut Fehlermeldung nicht übereinstimmt.
Kann mir bitte jemand weiterhelfen.Danke und Gruss walter
-
Schau Dir die Fehlermeldung mal ganz genau an, da siehst Du Deinen aufruf und den Aufruf der erwartet wurde.
-
Knuddlbaer sei mir jetzt nicht böse, aber mit Deiner Antwort stehe ich jetzt auf dem Schlauch.
Gruss Walter
-
Na von irgendwoher hast Du doch die Fehlermeldung.
Poste diese mal vollständig hier und ggf. noch das was zur Fehlermeldung im Ausgabenfenster steht.
In dieser Fehlermeldung steht sehr detailliert was nicht stimmt.
-
Das steht im Ausgabefenster:
1>------ Neues Erstellen gestartet: Projekt: MyChatClient, Konfiguration: Debug Win32 ------ 1>Die Zwischen- und Ausgabedateien für das Projekt "MyChatClient" mit der Konfiguration "Debug|Win32" werden gelöscht. 1>Kompilieren... 1>stdafx.cpp 1>Kompilieren... 1>MyChatClient.cpp 1>e:\visual studio 2005\projects\mychatclient\Form1.h(309) : error C3352: "void MyChatClient::Form1::OnConnect(System::IAsyncResult ^)": Die angegebene Funktion stimmt nicht mit dem Delegattyp "void (System::IAsyncResult ^)" überein. 1>AssemblyInfo.cpp 1>Code wird generiert... 1>Das Buildprotokoll wurde unter "file://e:\Visual Studio 2005\Projects\MyChatClient\Debug\BuildLog.htm" gespeichert. 1>MyChatClient - 1 Fehler, 0 Warnung(en) ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========
Das steht im Ausgabefenster. In der Buildlog.htm stehen auch keine weiteren Informationen.
Zeile Form1.h(309) bezieht sich auf die Zeile 11 in meinem CodeausschnittGruss Walter
-
Versuchs mal mit:
AsyncCallback^ pCallback = gcnew AsyncCallback(this,&Form1::OnConnect);
Über delegates weiß ich (bisher) recht wenig, aber anlehnend an das Beispiel was es für AsyncCallback gibt:
SampSyncSqrDelegate^ sampleDelegate = gcnew SampSyncSqrDelegate( sampSyncObj, &SampleSyncronized::Square );
-
Knuddlbaer, Du bist ne Schau. Ich hoffe Du bleibst mir länger gewogen. Das Blöde ist, ich hatte das mit dem this schon mal, hatte aber im 2. Parameter einen Fehler und bin dann, weil es ja in dem anderen Bsp. wie ich es oben erwähnt habe, anders steht, wieder davon abgekommen.
Gruss Walter und Danke.