Reputation: 733
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.
Upvotes: 1
Views: 613
Reputation: 733
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.
Upvotes: 0
Reputation: 941705
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.
Upvotes: 2