我正在尝试构建一个将由多个客户端使用的 COM DLL。
为此,我有 2 个客户。
- 控制台应用程序(订阅者)
- WPF 应用程序(发布者)
WPF 应用程序将调用 COM DLL 的 Publish 方法,该方法又会引发一个事件,订阅此事件的控制台应用程序将响应。
事件是静态的。
COM DLL
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComListen
{
[DispId(2)]
string Publish();
[DispId(1)]
string Version();
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IListenerEvents
{
void Ack();
}
public delegate void AckDelegate();
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IListenerEvents))]
public class Listen : IComListen
{
public static event AckDelegate Ack;
public string Publish()
{
Ack();
return "This message should be published";
}
public string Version()
{
return "0.050";
}
}
WPF 应用程序:
private void Button_Click(object sender, RoutedEventArgs e)
{
var listener = new Listen();
listener.Publish();
}
控制台应用程序:
private static void Main(string[] args)
{
Listen.Ack += Listen_Ack;
while (true)
{
}
}
private static void Listen_Ack()
{
throw new NotImplementedException();
}
当前状态是 COM DLL 中 Publish() 方法中的 Ack() 为空...