Announcement

Collapse
No announcement yet.

wie kann man Delegates in CLI(c++ in .Net bzw. CLI) verwenden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wie kann man Delegates in CLI(c++ in .Net bzw. CLI) verwenden?

    hallo,

    ich kann Delegates in C# anwenden, aber wenn ich gleichem Prinzip nach in CLI anwenden würde, habe ich folgendes Problem:

    Codes:

    Code:
    delegate void MyFunction(int value); // define a delegate type
        delegate void MyFunction1(SocketAsyncEventArgs e); // define a delegate 
    type
    
    .................
    
    
    ..........
    
        public class   serverSocket {
            
    readWriteEventArg = gcnew SocketAsyncEventArgs();
    		readWriteEventArg->Completed += gcnew MyFunction1(&serverSocket::IO_Completed);
    
    
      void serverSocket::IO_Completed(  SocketAsyncEventArgs^ e)
    {
        // determine which type of operation just completed and call the associated handler
        switch (e->LastOperation)
        {
    	case SocketAsyncOperation::Receive:
                ProcessReceive(e);
                break;
    	case SocketAsyncOperation::Send:
                ProcessSend(e);
                break;
            default:
                throw gcnew ArgumentException("The last operation completed on the socket was not a receive or send");
        }     
    
    
          };
    Die Fehlermeldung dazu:

    error C3352: "IO_Completed": Die angegebene Funktion stimmt nicht mit dem Delegattyp "void (System::Net::Sockets::SocketAsyncEventArgs)" überein.
    Folgender Versuch hat mir auch nicht weiter geholfen:
    acceptEventArg->Completed += gcnew EventHandler<SocketAsyncEventArgs>(AcceptEventArg_ Completed);
    wie kann ich Delegates benutzen? Es wäre super hilfreich wenn jemand mir Tipps für meinen Fehler hier geben würde.

    vielen Dank

    Marek
    Zuletzt editiert von Jürgen Thomas; 23.04.2010, 18:00. Reason: Code-Markierung berichtigt

  • #2
    Ich verstehe zu wenig von C++ um dir den richtigen syntax zu zeigen aber das was du da machst würde in dieser Form genausowenig in C# funktionieren.
    Der SocketAsyncEventArgs.Completed Event ist ein generischer EventHandler Typ der Form EventHandler<TEventArgs>. Bedeutet der erwartet einen Delegaten, übrigens wie alle Events, eine Parametersignatur mit Sender und EventArgs. Deine IO_Completed Methode, soweit kann ich c++ zumindest lesen, besteht nur aus EventArgs(hier halt SocketAsyncEventArgs). Der Compiler hat also vollkommen Recht wenn er behauptet das die Funktion nicht zum Delegaten paßt.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Ich verstehe zu wenig von C++ um dir den richtigen syntax zu zeigen aber das was du da machst würde in dieser Form genausowenig in C# funktionieren.
      in c# sieht so aus, es ist von C++ bisschen verschieden. Ausserdem wird der Code automatisch generiert(+= eintippen und tab drücken).
      readWriteEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(IO_Completed);

      dann kann man nur die IO_Completed Methed wie gewünscht implentieren...


      Ich habe eigentliches Problem wie folgt gelöst: zwar ich habe nicht erreicht, was ich machen wollte, aber zumindst hat mein Compiler somit beruhigt, meckert nicht mehr:
      readWriteEventArg->Completed +=
      gcnew EventHandler<SocketAsyncEventArgs^>(this, &serverSocket::IO_Completed2);

      mal schauen, ob es funktioniert bis zum Ende.

      Gruss

      Comment

      Working...
      X