C# Выставлять события из Excel vsto Addin для других надстроек - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу, чтобы мой Excel vsto addin выставлял некоторые события для других дополнений. Как я понял, RequestComAddInAutomationService можно использовать, чтобы позволить другим вызывать некоторый код из моего дополнения. Чтобы избежать ссылки на надстройку из другого надстройки, я объявляю интерфейсы в отдельной библиотеке

//in some library
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IManager
{
    void DoSmth();
}

//in the excel addin

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Manager: IManager
{
    internal readonly static Manager Instance = new Manager();
    private Manager(){}
    public void DoSmth()
    {
        // ...
    }
}
public partial class ThisAddIn
{
    protected override object RequestComAddInAutomationService()
    {
        return Manager.Instance;
    }
    //...
}

, что позволяет мне вызывать метод DoSmth из разных надстроек в одном экземпляре класса Manager.

object name = "ManagerService";
return (IManager) application.COMAddIns.Item(ref name).Object;

Я попытался добавить событие в этот интерфейс и реализовать его:

//in some library
public delegate void MyDelegate(Worksheet worksheet, MyEventArgs e);
public class MyEventArgs : EventArgs
{
    public string Value{get;}
    public MyEventArgs(string value)
    {
        Value = value;
    }
}


[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IManager
{
    void DoSmth();
    event MyDelegate MyEvent;
}

Но попытки подписаться на это событие

object name = "ManagerService";
var manager = (IManager) application.COMAddIns.Item(ref name).Object;
manager.MyEvent += (worksheet, args) => {
//...
};

приводят к выбрасыванию System.InvalidCastException и System.Reflection.TargetInvocationException (в окне вывода); Мне не удалось найти какую-либо информацию о разоблачении событий с помощью RequestComAddInAutomationService. Итак, как правильно выставлять события с помощью интерфейса из надстройки Excel для других надстроек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...