WinSCP.NET程序集:将自定义事件处理程序设置为Session.文件在C++/CLI中传输



对不起,我有一个特定的问题。是,这与为事件设置自定义事件处理程序有关。是的,这种类型的问题可能已经被问过很多次了,但在这里我必须限制在WinSCP的情况下。

参考Session.SynchronizeDirectories方法中的示例:
http://winscp.net/eng/docs/library_session_synchronizedirectories

我正在将C#示例转换为C++/CLI,但遇到了一个问题。

在C#中,很容易设置为:

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

在C++/CLI中,我执行以下操作:

WinSCP::Session ^ session = gcnew WinSCP::Session();
session->FileTransferred += gcnew EventHandler(FileTransferred);
...
static void FileTransferred(System::Object ^sender, WinSCP::TransferEventsArgs ^e)
{
    ....
}

但我得到了这个错误:

函数FileTransferred()与委托类型"void(System::Object^,System::EventArgs^)"不匹配。

我尝试更改为FileTransferred(System::Object ^sender, EventArgs ^e),但随后FileTransferred()的整个主体变为无效。

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

EventHandler是错误的委托类型。您需要创建一个WinSCP FileTransferredEventHandler委托。修复:

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

请注意,您还拼错了WinSCP::TransferEventsArgs,太多了。

实际上我离答案只有一步之遥。

在C#中,在session.FileTransferred之后键入+=后,系统提示我点击Tab按钮。然后我看到了以下内容:

session.FileTransferred += new FileTransferredEventHandler(FileTransferred);

FileTransferredEventHandler()可以获得正确的函数签名FileTransferred(object sender, TransferEventArgs e)(而不需要FileTransferred(object sender, EventArgs e).

我回到C++/CLI并执行同样的操作:

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

编译。没有抱怨。

最新更新