我有用 C# 实现事件的 COM 服务器,但不知道如何编写一个与事件挂钩的 C# 客户端。我发现了几篇描述如何做 C# 服务器和 C++ 客户端的文章,但没有一篇文章(或者我是盲人 :-P )描述了如何使用事件来做 C# 客户端。我能够连接到 COM 服务器对象,但不知道如何挂钩事件。
注意我有两个应用程序 - 一个包含 C# COM 服务器和另一个包含 C# 客户端的应用程序。服务器实现如下:
[ComVisible(true)]
[Guid("08214B02-512D-4785-9176-C4B4324FC340")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyServer
{
bool Play(string sFile);
}
[ComVisible(true)]
[Guid("141CAAEA-63CE-422E-BF00-BAF4DBEEA77A")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyServerEvents
{
[DispId(1)]
event OnPlayFinishedHandler OnPlayFinished;
}
[ComVisible(true)]
[ProgId("MyApp.MyServer")]
[Guid("D184855D-E425-46A6-9171-34C828353778")]
[ComSourceInterfaces(typeof(IMyServerEvents))]
[ClassInterface(ClassInterfaceType.None)]
public class MyServer : IMyServer, IDisposable
{
public MyServer()
{
}
[ComVisible(false)]
public delegate void OnPlayFinishedHandler();
public event OnPlayFinishedHandler OnPlayFinished;
public bool Play(string sFile)
{
if (OnPlayFinished != null)
OnPlayFinished();
return true;
}
}
现在是客户端,我正在通过运行对象表获取 COM 服务器对象(我认为这并不重要)。
IMyServer oServer = GetServer();
// TODO: Connect to OnPlayFinised event
oServer.Play("C://File.txt");
我试图将 oServer 转换为 IMyServerEvents,但这是不允许的。