Question

Sorry I have a bit specified question. Yes this is related to setting a custom Event Handler to an event. Yes, this type of questions may have already been asked many times, but here I have to restrict to WinSCP situation.

Refer to example in Session.SynchronizeDirectories method:
http://winscp.net/eng/docs/library_session_synchronizedirectories

I am converting the C# example to C++/CLI, but encounter a problem.

In C#, it is a no-brainer to set as:

Session session = new Session();
session.FileTransferred += FileTransferred;
...
private static void FileTransferred(object sender, TransferEventArgs e)
{
    ....
}

In C++/CLI, I do the following:

WinSCP::Session ^ session = gcnew WinSCP::Session();
session->FileTransferred += gcnew EventHandler(FileTransferred);
...

static void FileTransferred(System::Object ^sender, WinSCP::TransferEventsArgs ^e)
{
    ....
}

But I get this error:

function FileTransferred() does not match the delegate type 'void (System::Object ^, System::EventArgs ^)'.

I try changing to FileTransferred(System::Object ^sender, EventArgs ^e), but then the whole body of FileTransferred() become invalid.

Was it helpful?

Solution

  session->FileTransferred += gcnew EventHandler(FileTransferred);

EventHandler is the wrong delegate type. You need to create a WinSCP FileTransferredEventHandler delegate instead. Fix:

  session->FileTransferred += gcnew WinSCP::FileTransferredEventHandler(FileTransferred);

Beware that you also mis-spelled WinSCP::TransferEventsArgs, one s too many.

OTHER TIPS

I actually was just a step away from the answer.

In C#, after typing the += after session.FileTransferred, I was prompted to hit Tab button. I then saw the following:

session.FileTransferred += new FileTransferredEventHandler(FileTransferred);

This FileTransferredEventHandler() could pick up the correct function signature FileTransferred(object sender, TransferEventArgs e) (instead of requiring FileTransferred(object sender, EventArgs e).

I go back to C++/CLI and do the same:

session->FileTransferred += gcnew FileTransferredEventHandler(FileTransferred);

Compile. And no complain.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top