Я пытаюсь создать COM-DLL, которая будет использоваться несколькими клиентами.
для этого у меня есть 2 клиента.
- Консольное приложение (подписка)
- Приложение WPF (издатель)
приложение WPF вызовет метод Publish COM-библиотеки DLL, который, в свою очередь, вызовет событие, а консольное приложение, подписанное на это событие, ответит.
событие статично.
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();
}
текущее состояние заключается в том, что Ack() внутри метода Publish() в COM DLL имеет значение null...